01/10/2018, 08:14

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.

rogp10 viết 10:20 ngày 01/10/2018

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

True Blue viết 10:16 ngày 01/10/2018

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

*grab popcorn* viết 10:23 ngày 01/10/2018

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

Trần Hoàn viết 10:30 ngày 01/10/2018

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.

rogp10 viết 10:22 ngày 01/10/2018

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

Bài liên quan
0