A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ajd_jordan

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© ajd_jordan 初级黑马   /  2014-6-20 03:45  /  5017 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int a = 2;
  2. int result = a / ++a;
  3. printf("result = %d\n", result);
复制代码


我的分析思路是:自增运算符++的优先级是比乘除高的,那么先计算++a,结果是3,a也变为3,然后再计算除法,a / ++a = 3 / 3 = 1,但是程序运行结果是0,没搞懂是为什么。
而且第二行有警告信息:unsequenced modification and access to 'a',这是什么意思?

第一次发帖,求大神指教,谢谢~

2 个回复

倒序浏览
编译器问题,像g++是从右向左编译的,vc是从左向右的~~所以你这个在vc和g++下面可能会有不同结果
又例如下面这个例子
  1. int t;

  2. char buf[]={"abc"};

  3. for(t=0;buf[t]!='\0';t++)

  4.     printf("%d ",buf[t]);

  5. printf("\n");

  6. t=0;

  7. printf("%d %d %d",buf[t],buf[++t],buf[++t]);
复制代码


往往不能得到理想的结果
回复 使用道具 举报
sfm 中级黑马 2014-11-10 10:54:43
藤椅
这个优先级的问题不需要去强制的记忆,老是说这个不会的时候可以百度,以后时间长了就OK了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马