永发信息网

c语言前后缀自增自减问题

答案:3  悬赏:0  手机版
解决时间 2021-03-18 03:17
  • 提问者网友:萌卜娃娃
  • 2021-03-17 14:36
学C语言的时间不短了,但后来回顾前面竟然被些小题目难倒了,呵呵
希望围观的帮我解答一下嘛
i=8;j=10;
printf("%d,%d,%d,%d\n",++i,++i,j--,j--); // T1
printf("i=%d,j=%d,%d\n",i,j); // T2

T1:++i,++i的时候答案为 10,9,可i++的时候为8,8。大概跟自运算先后还有参数域先后有关?
T2:不经意写多了一个参数域%d,显示一个七位数,好奇问一下
T3:(另外写的)i=3; ++i*++i与i++*i++ 怎么得出来结果就25与9

希望解答一下...
最佳答案
  • 五星知识达人网友:独行浪子会拥风
  • 2021-03-17 16:08
LZ,对于这种++ --在一行的问题应该先声明编译器。
看LZ的程序可能是VC跑的. 在VC下,结果完全合理。
-------------------
首先,函数的参数都是从后到前的入栈的,printf收到模式字串时,会把每个%从栈取一个数。
++i,++i入栈时自然就是10,9了。
另外一个因为栈里已经空了,相当于取了一个内存随机数。
T3式子有问题,肯定是通不过编译的。希望LZ给全。
全部回答
  • 1楼网友:行雁书
  • 2021-03-17 18:28
c中++ --运算符优先级很高,优于大部分的运算符 vc中++i是先执行i+1,再参与其他运算;i++是先执行其他运算再进行i+1;所以第一个就没有什么疑问了。 至于第二个,我就纳闷了,格式化输入输出的前后是不用符号的,%d,%d在我看来是会导致异常的,不知道你的T1的正确结果是怎么运行过来的。 第三个也不说了,和第一个相同!
  • 2楼网友:胯下狙击手
  • 2021-03-17 17:34
第一个b=a++就是把a的值赋给b以后自己再加1,c=a--就是把a的值赋给c以后自己再减1,依次类推,就明白了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯