Thắc mắc về mảng trong C

Ví dụ như mình có cái mảng a[1]={0};
Như mình đọc trong sách thì &a == a
Như vậy thì biến mảng a chứa giá trị là địa chỉ của nó. Vậy tại sao *a == 0; Cái số 0 mình gán vào nó đuợc lưu ở đâu? Và làm sao mà biết được địa chỉ ô nhớ chứa số 0.

1 Like

*a == 0 hay *(a+0) == 0 hay a[0] == 0.

1 Like

Cái đó mình biết, vấn đề là a có giá trị là địa chỉ của nó( a== &a ) vậy thì *a sẽ ra địa chỉ của a chứ sao lại là số 0 mình gán vào

Vì mảng không phải thực sự là con trỏ.
Khi in a, compiler sẽ auto casting thành “con trỏ” và in ra địa chỉ.

Còn vì sao ngta làm vậy?
Để mảng có các hành vi tính chất giống với con trỏ. Thì khi đó sẽ dễ dàng cho các con trỏ khác trỏ vào mảng và duyệt mảng.

btw, Câu hỏi hay :smiley:

1 Like

giả sử khai báo a[] thì &a là ô nhớ FFDE0129 chẳng hạn, ô nhớ này lưu trữ giá trị a[0]=a
thì &(a+1) là ô nhớ FFDE012A, ô nhớ này lưu trữ giá trị a[1]=
(a+1)

của bạn thì mảng a[1]={0} thì mảng chỉ có giá trị a[0]=*a=0 thôi
còn tuỳ vào compiler thì mỗi lần chạy, a sẽ được cấp phát một khoảng ô nhớ nào đó nên không biết được là nó sẽ cấp phát vào ô nào.

Không phải, *a thì ra giá trị a trỏ vào chứ, &a mới là địa chỉ.

*a sẽ ra địa chỉ của a

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