追风~JT 发表于 2019-9-20 18:29:52

为什么运行结果是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;
}

yuesezhenmei 发表于 2019-9-20 19:38:24

共用体中 不像结构体那样互不影响,它的值会互相影响

superbe 发表于 2019-9-20 20:36:13

本帖最后由 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]
查看完整版本: 为什么运行结果是2,3