一道c语言指针题,求大神解答,感谢

int a[]={5,8,7,6,2,7,3},y;
int *p;
p=&a[1];
y=(*--p)++;
printf(“%d,%d,%d\n”,y,*p,*p++);

这题目输出的结果是

5,6,6

解析:

首先声明一个整型数组a,整形变量y,整型指针p。

p指向数组a[]的第1个元素,也就是8。

接下来,指针p先--,指向了数组a[]的第0个元素,也就是5。之后y取出p指向的内容,即5。之后p指针指向的内容又累加,即数组a[]的第0个元素从5变成了6。

因此打印输出y的内容是5,*p的内容是6,*p++的内容还是6(printf()执行完之后指针才移动,黄花菜都凉了)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-27
int a[]={5,8,7,6,2,7,3},y;
int *p;
//p指向a[1](8)。
p=&a[1];
//--p,使p先自减1,p最后指向a[0]。于是(*--p)等于a[0],y=(*--p)++;等同于y=a[0]++;。y等于5,a[0]最后等于6。
y=(*--p)++;
//输出5,8,6,因为参数按从右往左压入栈中。即先算*p++,又p指向a[0],所以*p++输出6后,p指向a[1];再算*p,输出8;最后算y输出5。
printf(“%d,%d,%d\n”,y,*p,*p++);本回答被提问者采纳
第2个回答  2019-01-27
答案为,5,89
第3个回答  2019-01-27
结果5 8 6追问

能不能说一下详细的过程,谢谢啦

相似回答