程序运行的结果是

main()
{int a[5]={2,4,6,8,10},*p,**k;
p=a;
k=&p;
printf("%d\n",*(p++));
printf("%d\n",**k);
}

要详细分析说明哦,谢谢

运行结果为:
2
4

p=a; //指针p指向数组a的首地址
k=&p;//k指向p的地址,也就是指针的地址,所以*k也就是指向p指向的地址

printf("%d\n",*(p++));
对于p++处理,是先将当前p的值代入表达式进行计算,再进行++处理,
所以先输出的是p当前指向的地址中的数据,也就是a[0]的值,即2
再进行++处理,也就是将p指向p的下一个地址,也就是a[1]的地址

又由于k指向p的地址,也就是指针的地址,所以*k也就是指向p指向的地址,
所以在printf("%d\n",*(p++)); 处理完毕后,*k也就指向了a[1]的地址
所以:
printf("%d\n",**k);
输出的是a[1]的值,也就是4

所以,输出结果为:
2
4
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-20
两行都输出2,也就是:
2
2

第一行输出2,是因为p++的++在右边,先输出再++

第二行输出2,因为尽管这时候p已经改变,但是k没有重新赋值,仍然是以前的值
第2个回答  2009-03-20
为2,4
指针P指向a,即a[0]的地址
*(p++)即先得a[0]的值2,然后p往下滑动一个存储空间
k为P的地址,一开始**K也为a[0],但执行了*(P++)后,*k即为p+1
**k即为a[1],得4
相似回答
大家正在搜