指针的指针地址运用
以下代碼輸出什么__.
1
2
3
4
5
6
main()
{
int a[5]={1,2,3,4,5};
int p=(int )(&a+1);
printf(“%d”,*(p-1));
}
正確答案: C
1
2
5
出現(xiàn)錯(cuò)誤
選擇c,&a表示一個(gè)指向大小為5數(shù)組的指針,那么&a+1就是表示一個(gè)指向大小為5的下一個(gè)數(shù)組的指針,也就是數(shù)組a最后一個(gè)元素的下一個(gè)位置,那么int*p=(int*)(&a+1)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,將指向數(shù)組的指針轉(zhuǎn)換為指向第二個(gè)數(shù)組中首元素的指針,所以p-1則是指向第一個(gè)數(shù)組中最后一個(gè)元素的指針,所以輸出是5
或者:
數(shù)組名a可以作為數(shù)組的首地址,而&a是數(shù)組的指針。int p=(int )(&a+1);//這條語(yǔ)句中&a代表整個(gè)數(shù)組的地址,+1應(yīng)加上sizeof(a)的長(zhǎng)度,故指針p指向a[5]處。printf(“%d”,(*p-1));//(*p-1) == a[4],語(yǔ)句輸出a[4]的值,為5,答案 C
總結(jié)
- 上一篇: 什么函数不能声明为虚函数
- 下一篇: 数组和指针的长度