网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月06日漏签0天
c语言吧 关注:801,844贴子:4,375,911
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 6回复贴,共1页
<<返回c语言吧
>0< 加载中...

#include <stdio.h> void main()

  • 只看楼主
  • 收藏

  • 回复
  • 18801278391m
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("p=%d,q=%d\n",p,q);
}
请教一下大神 为啥这个程序中q最后的值是22


  • 495大吃货
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


2026-02-06 10:27:13
广告
不感兴趣
开通SVIP免广告
  • 说说说
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我也想知道q为什么是24


  • yearzhuyu666
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不同编译器显示的结果不一样,所以不同编译器运算顺序不一样,咱俩编译器运算结果一样,说明咱们两个运算顺序一样,++i的加号是从右向左运算的,+号是从左向右运算的。q=(++j)+(++j)+(++j);的运算顺序是q={{(++j)+(++j)}+(++j);},7+7+8=22,{{7+7}+8}=22,第一步是{(++j)+(++j)}={7+7}=14,第二步是{14+(++j)}=14,{14+8}=14这是C语言的一个诡异之处啊,如果q=(++j)+(++j)=14=7+7,q=(++j)+(++j)+(++j)=22=7+7+8,q=(++j)+(++j)+(++j)=31=7+7+8+9,q=(++j)+(++j)+(++j)+(++j)=41=7+7+8+9+10,q=(++j)+(++j)+(++j)+(++j)+(++j)=52=7+7+8+9+10+11,看到这想必有了一定头绪,你一定疑问q=(++j)+(++j)=14=7+7怎么回事?,后面的规律相信你清楚了,首先你这个编译器(++j)+(++j),系统是这样看待的{(++j)+(++j)},5+1+1+5+1+1,这个是++i的你编译器的一个特性,首先+号优先级数低于++号,先算++号的,由于+号的约束,就是前两个在{ }内,前两个先加一后再继续运算,所以在{ }内先进行++的运算,两个彼此影响,都要加5+1+1+5+1+1,7+7,14,{(++j)+(++j)}。而q={{(++j)+(++j)}+(++j);}相当于{14+(++j)}=14,{(++j)+(++j)}已经变成14了无法影响同{ }内(++j),所以q=(++j)+(++j)+(++j)=22=7+7+8。至于为什么与别的编译器不一样,多试验你就明白了,这些要看汇编语言怎么表示,我这样描述不太准确,但确实是这个规律。


  • yearzhuyu666
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不同编译运算顺序不一样,多试试。我用的是Code::Blocks 17.12,,其他编译器我不太清楚,先用Code::Blocks 17.12的规律讲,++i与--i不论什么位置,都受++i,--i,i++,i--的影响,都是加一完后运算后打印出来。而 i++,i--也是不论什么位置,都只受右边++i,--i,i++,i--的影响。不同的是,请看第二张图片printf("%d,%d,%d,%d,%d,%d",i++,i++,++i,++i);,为什么打印出来的是3,2,4,4。明明原理都一样, i++,i--是先运算再加一,所以先打印出运算了的,显示结果,是i++,i++,++i,++i中从左到右第二个i++运算的的是,++i,++i,第三第四的加一等于2,打印出来所以值为2,i++,i--是先运算再加一,所以运算继续,第二个打印完后,值继续运算加一了传给第一个i++所以值为3,此时先把运算结果3打印出来,但是加一还要继续,得4,但不打印,所以值为3,2,4,4.还有什么疑问的话可以一起探讨。










  • 666是是是6
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看的我一脸懵逼


  • 666是是是6
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
特性.......同问:q 的运算顺序


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示