0
点赞
收藏
分享

微信扫一扫

区分数组的地址、数组首元素的地址、&数组名

蒸熟的土豆 2022-08-30 阅读 190

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;
}

区分数组的地址、数组首元素的地址、&数组名_数组_02

由上面第一段程序我们可知该数组的第一个元素的地址为000000000061FDF0,arr+1指数组的第二个元素的地址,由于int型变量占4个字节,所以第二个元素的地址为000000000061FDF4;

而 printf("%p\n",&arr+1)的打印结果为什么是000000000061FE18呢?因为&arr是整个数组的地址,&arr+1则表示为数组的首地址加上整个数组所占字节,数组里一共有10位元素,一个元素占4个字节,则数组占40个字节,所以打印结果如上。

举报

相关推荐

0 条评论