int main()
{
int arr[10] = {0};
printf("数组元素首地址 :%d\n",arr); //数组元素首地址 2293280
printf("数组首地址 :%d\n",&arr); //数组首地址 2293280
printf("数组元素首地址+1 :%d\n",arr+1); //数组元素首地址 2293284
printf("数组首地址+1 :%d\n",&arr+1); //数组首地址 2293320
return 0;
}
- arr:数组名,同时也表示数组第一个元素的首字节地址,是一个常量值。
- arr[0]:数组一个元素,可以进行读写操作。
- &arr[0]:等价于arr,是一个地址常量,只能作为右值。
- &arr:数组首地址,其值与arr想等,但含义完全不同。&arr,是将整个数组作为一个新的数组类型,&arr就是这个类型对应内存空间的首地址。
所以,上述代码中,arr和&arr输出都为2293280,但是arr+1 输出为2293284,即在2293280基础上增加了4个字节(1×sizeof(int))。&arr+1输出为2293320,在2293280基础上增加了40个字节(10×sizeof(int))。
本文详细解析了C语言中数组名、数组元素、数组首地址及它们之间的关系。通过实例展示了数组元素首地址和数组首地址的差异,以及地址运算后偏移量的不同。读者将理解arr、arr[0]、&arr[0]和&arr的区别,并掌握数组在内存中的表示方式。
5076

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



