Cần giải thích *(a+i) là gì

Ai chỉ dùm e cái *(a+i) là gì với ạ ? E thì e hiểu là giá trị tại địa chỉ (a + i). Nhưng lại chẳng hiểu a+i là gì nữa @@

Đã “em hiểu” như thế này rồi “em lại chẳng hiểu” nữa @@ cuối cùng anh không hiểu là em không hiểu chỗ nào của nó luôn :joy: Nó chỉ là con trỏ thôi, con trỏ lấy giá trị tại địa chỉ a+i (đúng như cách em hiểu). Viết như vậy sẽ vắn tắt, dễ hiểu hơn là int *p; p = a + i; printf("%d - ", *p); (2 cách là tương đương nhưng cách sau lại tốn chỗ cho 1 biến và phức tạp hóa vấn đề hơn).

E đang k hiểu chỗ (a + i ) đó ạ. bình thường k động vào con trỏ sẽ là a[0] hay a[i] gì đó. thì nó rõ ràng vị trí trong mảng r, giờ n cho ‘a’ , thì e biết nó là cái j ạ ? rồi còn lấy a+i mà i thì chạy từ 0. E đang xem nó cái video này mà khó hiểu quá, anh chỉ e cái :slight_smile:

Làm mấy bài giời ơi kiểu này chỉ thêm phức tạp.

Cái kiểu con trỏ trong mảng là dành cho truy cập tuần tự (đọc chuỗi) ấy, mảng thì cứ a[i] mà giã chứ viết *(a+i) chi cho cực. (bạn cứ nhớ &a[i] == a+i là được, mà cái dấu + này nó ko phải như bt, nếu bạn để ý printout)

Cái này mình có trả lời hồi trưa :smiley: với a là cái mảng thì a == &a thôi.

4 Likes

Printf (a+i) mà i++ thì như sau:
Thực chất là tăng biến con trỏ lên 1, mà biến con trỏ đó khởi tạo là biến lưu địa chỉ của phần tử đầu tiên của mảng, tăng 1 thì tự động nó trỏ đến phần tử tiếp theo của mảng
tùy theo kiểu dữ liệu của mảng mà giá trị của con trỏ sẽ tăng 1 lượng i
sizeof kiểu dữ liệu của mảng
Viết code rõ ràng ra xíu cho dễ hiểu

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