30/09/2018, 17:18
Con trỏ trong mảng 1 chiều
Các anh chị cho em hỏi: Khi nhập xuất mảng 1 chiều thì trong hàm nhập nên khai báo biến n là biến con trỏ thế? trong khi không có nó e thấy nó vẫn chạy đc mà (n là số phần tử của mảng nhập vào từ bàn phím). Kiểu như này ạ:
void Nhap(int a[10], int &n);
void Xuat(int a[10], int n);
Bài liên quan
Ko hiểu ý bạn lắm, còn khai báo thì ntn
void NhapMang(int *a, int n); void XuatMang(int *a, int n);
ý e là sao hàm Nhap() kia cần int &n trong khi chỉ cần int n là đc? Nhưng khi e bỏ &n đi và thay là n thì thầy bảo sai
Nếu giá trị của n cần thay đổi trong hàm thì cần truyền tham chiếu &n còn nếu ko thay đổi thì ko cần
em chưa hiểu lắm trong bài toán này @SoiLuv
Ví dụ thủ tục
NhapMang
, sẽ truyền vào 2 cái là mảng và số lượng phần tử trong mảng, nếu số lượng phần tử bạn nhập trong hàmmain()
thì chỉ cần truyền vào bình thườngvoid NhapMang(int *, int n)
, còn nếu bạn muốn nhập n trongNhapMang
thì viết tnvoid NhapMang(int *, int &n)
Đoạn này lỗi ở dòng 4 đúng ko anh chị?
Ngoài lề tí:
Bạn cứ làm sao máy cho ra kết quả đúng là được, không nhất thiết phải làm theo thầy. Máy cho ra kết quả sai nghĩa là code bạn sai, thế thôi.
Nói chung là mấy dòng này đều sai, bạn định làm gì?
@SoiLuv chỉ e chỗ sai mỗi dòng đi ạ. Cái này chỉ xem cú pháp đúng hay không thôi chứ chẳng tuộc bài tập nào cả a
int A[2]={1,5}; int *pa=A; // dòng này là gì vậy????
dòng 1 là khai báo mảng
dòng 2 là khai báo con trỏ pa và nó trỏ đến địa chỉ của mảng A
do mảng là con trỏ nên có thể gán con trỏ cho con trỏ cùng kiểu với nhau. Trong 4 dòng trên e nghĩ dòng 4 sai: delete pa; vì nó chưa đc cấp phát bộ nhớ động nên ko dùng giải phóng bộ nhớ ở đây đc. Enghĩ vậy ko biết đúng hay ko?
khi viết như vậy thì nó sẽ hiểu là con trỏ trỏ đến phần từ đầu tiên của mảng, ko có gì sai cả
thế có phải dòng 4 sai ko vậy a @SoiLuv
delete [] pa
Viết như vậy để giải phóng
e biết là câu lệnh dùng để giải phóng rồi, nhưng chưa cấp phát thì có đc giải phóng ko ý a, đầu bài hỏi trong 4 câu lệnh này câu lệnh nào sai?
khi giải phóng tức là truyền một địa chỉ vào và hàm delete sẽ giải phóng địa chỉ đó. Lưu ý là chỉ giải phóng địa chỉ ở bộ nhớ heap thôi.
Thế kết luận trong 4 dòng này thì dòng nào sai zợ anh chị ơi?
dòng delete pa. pa ko trỏ tới mảng được cấp phát động nào mà đi giải phóng thì tức là sai rồi.
cho em hỏi, khi làm việc với mảng 1 chiều hay nhiều chiều có nhất thiết phải cấp phát bộ nhớ động cho chúng ko?