int main()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
printf("%p\n",&arr[0]);//打印数组的首地址
printf("%p\n",arr);//打印数组的首地址
printf("%p\n",&arr);//打印数组的地址
return 0;
}
注意区分第二个和第三个printf,虽然打印结果相同,但是含义不同。
printf("%p\n",arr)指的是数组的第一个元素的地址
printf("%p\n",&arr)指的是数组的地址
我们可以通过下面的程序演示一下它俩的区别
int main()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
printf("%p\n",arr+1);
printf("%p\n",&arr+1);
return 0;
}
由上面第一段程序我们可知该数组的第一个元素的地址为000000000061FDF0,arr+1指数组的第二个元素的地址,由于int型变量占4个字节,所以第二个元素的地址为000000000061FDF4;
而 printf("%p\n",&arr+1)的打印结果为什么是000000000061FE18呢?因为&arr是整个数组的地址,&arr+1则表示为数组的首地址加上整个数组所占字节,数组里一共有10位元素,一个元素占4个字节,则数组占40个字节,所以打印结果如上。