鱼C论坛

 找回密码
 立即注册
查看: 1169|回复: 2

[已解决]为什么运行结果是2,3

[复制链接]
发表于 2019-9-20 18:29:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<string.h>

  3. union ks
  4. {
  5.         int a;
  6.         int b;
  7. };

  8. union ks s[4];
  9. union ks *p;
  10. int main()
  11. {
  12.         int n=1,i;
  13.         for(i=0;i<4;i++)
  14.         {
  15.                 s[i].a=n;
  16.                 s[i].b=s[i].a+1;
  17.                 n=n+2;
  18.         }
  19.         p=&s[0];
  20.         printf("%d,",p->a);
  21.         printf("%d\n",++p->a);
  22.         return 0;
  23. }
复制代码
最佳答案
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语言运算符优先级表就明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-20 19:38:24 | 显示全部楼层
共用体中 不像结构体那样互不影响,它的值会互相影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语言运算符优先级表就明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 15:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表