Con trỏ mảng trong C
Chào mọi người,
Mọi người cho em hỏi câu này. Em khởi tạo 2 con trỏ int và cấp phát bộ nhớ động gồm 3 ô nhớ.
int *a = malloc(3 * sizeof(int));
int *b = malloc(3 * sizeof(int));
Bây giờ em muốn khi em thay đổi giá trị *(b + 1) thì *(a + 1) cũng sẽ thay đổi. Nhưng khi em thay đổi giá trị *b và *(b + 2) thì *a và *(a + 2) không bị ảnh hưởng.
nếu như em viết a = b -> thì b[0] b[1] b[2] thay đổi thì lần lượt a[0] a[1] a[2] cũng thay đổi theo. Vậy không đúng yêu cầu.
nếu như em biết a + 1 = b + 1 thì chương trình báo lỗi
Có anh/chị nào có cách không? Giúp em với.
mỗi lần gán
b[1] = ...
thì ráng viết thêmb[1] = a[1] = ...
vậyHi Ho Hai Dang.
Yêu cầu lạ vậy ? Bạn nêu rõ bài toán sao lại có yêu cầu đó xem.
Hi Tao Không Ngu,
Không mình tự nghĩ ra thôi =)) Tham khảo thì thấy không làm được. Nhưng về mặt lý thuyết con trỏ thì mình nghĩ nó gán địa chỉ được -> Nên mới hỏi xem có cách nào làm không
Hi Ho Hai Dang.
Hướng tư duy là đúng nhưng bạn chưa hiểu rõ C lắm. a[1] và b[1] là các biến kiểu nguyên không phải biến con trỏ nên không gán nó bằng địa chỉ được (Cái này không đúng lắm về mặt câu từ). Nhưng nếu nó là con trỏ thì hoàn toàn được. Bạn có thể thử mảng con trỏ.
Không mình dùng mảng con trỏ đó. Đáng lẽ mình nên ghi là *(a + 1) thay vì a[1] và *(b + 1) thay vì b[1]. Nhưng sợ ghi vậy nhìn rối nên mình ghi kiểu a[1] và b[1]. . Để mình sửa lại cho không bi hiểu nhầm. Mình đã thử mảng con trỏ rồi nhưng Compiler không cho phép.
Mình gán địa chỉ con trỏ là
a+1 = b+1 -> error
Hi Ho Hai Dang.
Bạn xem lại phần con trỏ và cấp phát động xem. Cái bạn khai báo nó là mảng bình thường không phải mảng con trỏ.