若已定义:int a[]={1,2,3},*p=a;则执行*p++=5;(*p)++;后a[0],a[1],a[2]的值依次是()。

2025-06-22 14:33:32
推荐回答(5个)
回答1:

#include
void main()
{
int a[]={1,2,3};
int *p;
p=a;
*p++=5;
(*p)++;
printf("%d%d%d",a[0],a[1],a[2]);
}
5 3 3
*、++、--等单目运算符都是右结合,也就是说*p++相当于*(p++),即先把5赋值给*p(a[0],a[0]=5),再把p指向a[1](p=&a[1]),然后(*p)++就相当于(a[1]++,即a[1=3]),最后依次输出a[0]、a[1]、a[2]当然是5 3 3了。

回答2:

其实这里面的重点就是*,++的优先级问题,还有p++的意思是先用后加,问题是加了多少个字节,实际是一个int型所占有的字节,一般是4,也有可能是8,再不行的话,自己可以用一些图形化界面的编译器debug一下

回答3:

p++值是p,但是p+=1了。所以a[0]=5。然后p指向的内容,就是a[1]+=1了。

回答4:

5 3 3
*p=a指p=&a[0]
*p++=5指*p=5,p=p+1,即a[0]=5。此时p=&a[1]
(*p)++就相当于a[1]++,即a[1]=3
a[2]不变

回答5:

好像是5 3 3