C语言数组名和数组名取地址的区别
正在加载···
AI摘要
HunYuan-Lite
定义以下数组
1 | int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
a 和 &a 的值在数值上确实是相同的,但它们的类型和含义有本质区别。
- a
含义:a 是数组名,代表数组首元素的地址,也就是&a[0]。
类型:int*(指向 int 的指针)。
数值:数组第一个元素的地址。 - &a
含义:&a 是整个数组的地址,通过取址运算符 & 显式获取。
类型:int (*)[10](指向包含 10 个 int 的数组的指针)。
数值:与 &a[0] 相同,即数组的起始地址。
那么 a+1 和 &a+1 的值相等吗?
当对指针进行加法运算时,偏移量是由指针的类型决定的。
由于 a 的类型是int*,因此 a+1 会偏移 1*sizeof(int) 字节,即指向下一个元素。
由于 &a 的类型是int (*)[10],因此 &a+1 会偏移 1*sizeof(int[10]) 字节,即指向数组末尾后的位置。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xgclevo的博客!
评论