#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *p = (int *)(&a+1);
// printf("%p\t%p\n",a,p);
printf("%d\t%d",*(a+1),*(p-1));
return 0;
}
/*
輸出:
//0x7ffd9226ad50 0x7ffd9226ad64
2 5
*/
這題初看可能會(huì)直接得出答案是2 1
,但真正答案是2 5
窝稿,原因是(&a+1)
這一句拔鹰,a
是一個(gè)數(shù)組名甘苍,也代表該數(shù)組的首地址,&a
表示地址的地址联喘,也就是二維指針了华蜒。這個(gè)二維指針是指向包含 5個(gè)成員的int
型數(shù)組,相當(dāng)于一個(gè)數(shù)組指針int (*p)[5]
豁遭,所以(&a+1)
就指向了下個(gè)包含5個(gè)成員的int
型數(shù)組首地址叭喜,之后又在外面做了類型轉(zhuǎn)換(int *)
轉(zhuǎn)為一維指針,所以p-1
就指向了上個(gè)數(shù)組的末地址蓖谢,也就是a+4
捂蕴,最終答案*(p-1)
就是5
譬涡。