数组名取地址

intmain()
{
intc[]={1,2,3,4,5};
int*pt=(int*)(&c+1);
printf("%d\n",*(pt-1));
pt=(int*)(c+1);
printf("%d\n",*(pt-1));
return0;
}
输出:5,1;
请问第一次输出为什么是5,数组名就是地址了,再取地址变成了什么?
海绵宝宝撒
浏览 611回答 2
2回答

米琪卡哇伊

再取一次就是行指针。所以&c+1就指向了数组的下一行,也就是5后面的那个地址。C没有数组越界的检查,只会根据语法控制指针的加减(指向)。

慕容森

c表示&c[0],也即对数组首元素取地址,c+1表示首地址+sizeof(元素类型)。&c虽然值为数组首元素地址,但类型为:类型(*)[数组元素个数],所以&c+1大小为:首地址+sizeof(c)。所以,c代表数组首元素地址,&c代表整个数组地址
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript