Cả hai câu lệnh đều in ra địa chỉ và có thể có nghĩa là giải thích số học con trỏ.
a
và &a
KHÔNG giống nhau, chúng có các loại khác nhau nhưng giữ cùng một địa chỉ bộ nhớ.
&a
là loại int (*)[10]
(mà hoạt động như một con trỏ đến một mảng)
a
là loại int [10]
(mà hoạt động như một con trỏ đến một yếu tố duy nhất)
Vì vậy, khi bạn thêm 1 giữ những loại trong lí trí. Con trỏ sẽ được bù đắp bằng kích thước của loại địa chỉ chứa. a+1
bù đắp theo kích thước của int, tức là thành phần tử thứ hai trong mảng. &a+1
bù trừ hoàn toàn qua toàn bộ mảng.
Nguồn
2010-06-07 12:23:37
Đó là gần như tất cả các loại trong C là về: số học và kích thước. – mathk
Để hoàn thành, sẽ tốt hơn nếu thêm '& a [0]' là kiểu 'int *' và sẽ hoạt động rất giống 'a'. – Hugues
@Brian R.Bondy SO chúng ta có thể sử dụng 'sizeof' để chỉ ra những khác biệt trong các loại của chúng? – sikisis