題目要求
若有以下定義和語句:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則不能表示a數組元素的表達式是( )。
(A)*p (B)a[10] (C)*a (D)a[p-a]
思路分析
基礎比較好的話,一眼就能看出,B選項不對,因爲a數組只要10個元素,最後一個元素對應是a[9]=10,a[10]不屬於a,如果是a[10],這裏就內存越界,然後看看別的選項,*p就是*a也就是a[0],A,C,選項沒問題
值得一提的是,D選項中,a[p-a],p指向的是數組a,因爲p中與a數據相同,都是數組a[10]的首地址,所以p-a就等於0,因此a[p-a]就相當於a[0]
代碼演示
#include <stdio.h>
#include <string.h>
int main()
{
int a[10]={1,2,0,4,5,6,7,8,9,10};
int *p=a;
printf("*p=%d\n",*p);
printf("a[10]=%d\n",a[10]);
printf("*a=%d\n",*a);
printf("a[p-a]=%d\n",a[p-a]);
return 0;
}
驗證結果
可以看出來,ACD輸出的結果都爲1