题目要求
执行以下程序段后,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;
}
验证结果