C语言的一个题目

来源:百度知道 编辑:UC知道 时间:2024/05/16 12:24:07
#include<stdio.h>
union ks
{int a;
int b;
};
union ks s[4];
union ks *p;
main()
{
int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[0];
printf("%d,",p->a);
printf("%d",++p->a);
}
这道题答案为什么是2,3 而不是2,4
共用体有效的数据不应该是最后一个输入的数据嘛?那应该是2,4啊?
哪个高手回答下

这里呢,关系到C的运算符的优先级问题,你说的没错,共用体的特点是你说的那样,主要是这里++p->a,这里的运算过程,先是p->a,然后再是++

答案是错的.最后结果是2,4.

你上机调试下就知道了.

程序最后一行改为 printf("%d",(++p)->a);即可

为了准确的告诉计算机你想做什么
在对操作符的优先关系不太清楚的情况下尽量使用()
此题中++的优先级低于->

2,3楼正解
指针能不用,最好不要用