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);

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àm main() thì chỉ cần truyền vào bình thường void NhapMang(int *, int n), còn nếu bạn muốn nhập n trong NhapMang thì viết tn void NhapMang(int *, int &n)

1 Like

Đoạn này lỗi ở dòng 4 đúng ko anh chị?

int A[2]={1,5};
int *pa=A;
pa+=15;
delete pa;

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.

1 Like

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

:frowning: 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.

1 Like

Thế kết luận trong 4 dòng này thì dòng nào sai zợ anh chị ơi?

int A[2]={1,5};
int *pa=A;
pa+=15;
delete pa;

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.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?