为什么运行结果是2,3
#include<stdio.h>#include<string.h>
union ks
{
int a;
int b;
};
union ks s;
union ks *p;
int main()
{
int n=1,i;
for(i=0;i<4;i++)
{
s.a=n;
s.b=s.a+1;
n=n+2;
}
p=&s;
printf("%d,",p->a);
printf("%d\n",++p->a);
return 0;
} 共用体中 不像结构体那样互不影响,它的值会互相影响 本帖最后由 superbe 于 2019-9-20 20:42 编辑
首先,a和b是同一个内存空间,修改a就是修改b,反之也是。不难看出,循环后联合数组的值是2,4,6,8。
其次,程序结果是2,3是因为:(2不用説了,就是数组第一个元素的值)
printf("%d\n",++p->a); 其中->的优先级比++高,所以先运算p->a为2,再运算++,将p->a再加上1,现在p->a变成了3,所以结果为2,3。
把++p加上括号,(++p)->a可以得出正确结果2,4
看下c语言运算符优先级表就明白了。
页:
[1]