数组名a与数组名取地址&a的差异

2016-12-02 12:52:51来源:网络收集作者:三线码农人点击

第七城市

老话有句说--差之毫厘,谬以千里。

人也分两种,一种人是凡事尽善尽美型的,另一种人就是马马虎虎型的。

int main(int argc, char *argv[])
{
int a[] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d",*(a+1),*(ptr-1));
getchar();
return 0;
}

上面这段代码的输出为 2 5

关键是下面这句:

int *ptr = (int*)(&a+1);

对数组a取地址的含义是----int (*p)[5]

指向a[5]数组的指针;

虽然a=&a,但是含义是不相同的。

所以,&a+1是整个指针向前移动一个

数组的单位。

ptr

因此,输出为2 5;

同理对于二维数组也是一样的;

int main(int argc, char *argv[])
{
int a[] = {1,2,3,4,5};
int b[2][5] = {1,2,3,4,5,6,7,8,9,10};
int *ptr = (int*)(&a+1);
int *ptrb = (int*)(&b+1);
printf("%d %d",*(a+1),*(ptr-1));
printf("/n");
printf("%d",*(ptrb-1));
getchar();
return 0;
}

b的输出为10;

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台