-
定义一个数组 int a[10]
a表示数组的基地址;
&a表示整个数组的地址;
这两个组虽然数值上一样,但是类型不一样。 -
例如:a+1等价于a[1];
-
而&a+1等价于指向下个地址
#include <stdio.h>
int main(void)
{
int a[5];
printf("a为: %p\n",a);//打印出数组基地址
printf("a+1为: %p\n",a+1);//打印出a[1]的地址
printf("&a+1为:%p\n",&a+1);//打印出下一个数组的基地址
return 0;
}
结果:

- 还有很重要的一点:数组访问越界问题
定义一个int a[5]数组,访问a[-1]和a[5]都属于越界访问,尽管有些编译器不报错,但是呈现出来的值可能是无规律的,也可能是个定值。这种操作我们是要避免的,免得我们在后续项目开发中出现无法理解的错误。
本文探讨了数组在C语言中的表示,a表示数组基地址,&a表示整个数组的地址,两者数值相同但类型不同。通过示例代码展示了a+1指向数组第二个元素,而&a+1则指向数组下一个内存块的地址。同时强调了数组越界访问的潜在风险,即使某些编译器不报错,也可能导致不可预测的结果,应避免此类操作。
3万+

被折叠的 条评论
为什么被折叠?



