題目要求
執行以下程序段後,m的值爲( )。
int a[2][3]={ {1,2,3},{4,5,6} };
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
思路分析
剛看到這個題目,完了,這是三重指針啊,好幾個*號啊,這怎麼辦,選擇題還可以猜,填空題只能蒙一個
但是仔細一想,好像可以做,中間的*好像是 乘號 的意思,我的思路是把二維數組轉化爲一維數組
0 | 1 | 2 | |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
轉化爲一維數組
a | 0 | 1 | 2 | 3 | 4 | 5 |
元素 | 1 | 2 | 3 | 4 | 5 | 6 |
*p=a[0]=1
*(p+2)=a[0+2]=3
*(p+4)=a[0+4]=5
m=1*3*5=15
代碼演示
#include<stdio.h>
int main()
{
int a[2][3]={ {1,2,3},{4,5,6} };
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
printf("*p=%d\n",*p);
printf("*(p+2)=%d\n",*(p+2));
printf("*(p+4)=%d\n",*(p+4));
printf("m=%d\n",m);
return 0;
}
驗證結果