若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;

若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;,阅读下面程序段,写出运行结果:
for(m=0;m<3;m++)
p[m]=&a[m*4];
printf(“%d\n“,p[2][2]);
程序运行结果:
请问答案是多少,解释一下运行过程 谢谢!
谢谢各位的指教!

结果为11。

int *p[3]表示数组p是一个指针数组,每个元素是一个指向整型数据的一个指针。

for(m=0;m<3;m++)表示有三次循环,m分别是0,1,2。

p[m]=&a[m*4]执行后,将a[0]、a[4]、a[8]的地址分别赋予给p[0]、p1[1]、p[2], 即指针p[0]、p1[1]、p[2]指向a[0]、a[4]、a[8]上的数据,可以数组p看成一个3行4列的二维数组,将数组a的数据转换成一个3行4列的二维数组。

则p[2][2]代表了数组a里的第11个数据,即11。

扩展资料:

与数组指针关系

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动); 指针数组是数组元素为指针的数组,其本质为数组。 

例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针, []的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量。

参考资料:

百度百科-数组指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
#include<stdio.h>
void main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化
int *p[3];//定义指针数组,每一个元素都是指针
int m;//定义变量m
for(m=0;m<3;m++)//循环三次
p[m]=&a[m*4];
/**************开始分析循环语句******************
m=0时,p[0]=&a[0] ,p[0]指向a[0]
m=1时,p[1]=&a[4] ,p[1]指向a[4]
m=2时,p[2]=&a[8] ,p[2]指向a[8]
*************************************************/
printf("%d\n",p[2][2]);
// 相当于p[2]+2 因为p[2]指向a[8],故p[2][2]指向a[10]
//a[10]所对应的值是11 ,故输出11
}
//请看解释,不懂的可追问哦本回答被提问者和网友采纳
第2个回答  2012-04-08
答案是11 ,它定义了一个指针数组 int *p[3] 里面的元素是指针,有3个元素,每个指针都可以指向一个数组。 执行for循环时 第三个元素指针 p[2]=&a[2*4] 也就是p[8] ,
也就是p[2][0]=a[8]
p[2][2] 就是再向后数三个元素,也就是 11
第3个回答  2012-12-29
若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;,阅读下面程序段,写出运行结果:
for(m=0;m<3;m++)
p[m]=&a[m*4];
printf(“%d\n“,p[2][2]);
程序运行结果:
请问答案是多少,解释一下运行过程 谢谢!
问题补充:谢谢各位的指教!
相似回答