极客秀
搜索

C语言:i++ or ++i ? 先用再加和先加再用!递增递减运算符在函数调用中出现的大坑。

C语言中有许多奇怪的运算符,本期我们介绍一下C语言中的递增运算符以及递减运算符。

i++ 和 ++i 都等价于 i = i + 1;

他的目的是简化i = i +1;运算,但是++i和i++表现在行为上的不同,++i是 前置递增运算符 , 它先将 i
的值增加1,然后返回增加后的值。换句话说,它会先执行递增操作,然后再进行其他操作。

可以看到,当我们赋值的时候,i++的时候此时i先是5赋值给a,再递增,所以输出的时候,a是5,i是6。 而当我们使用++i的时候, i先进行递增
,再将值赋值给a,这时候i的值为6,所以当我们输出a时候,结果是6。 在代码中常用这种方式,我们可以简化我们的代码。


    for (int i = 0; i < 500; i++)    {        sin[i] = i;    }

例如在for循环中,我们使用i++来代替i = i + 1;让我们可以遍历数据。

例如在嵌入式中,定时器进行采样的时候,可以用i++来替代数组的递增,可以帮助我们提高效率,让代码看上去更加简洁。
除了递增运算符之外,C语言中还有递减运算符以及前置递减运算符,i–和–i。其用法与递增预算符一样。

  • ** 递增递减运算符在函数调用中出现的问题 **

但是当我们使用printf进行输出的时候,会发现此时居然是1和1,按照我的习惯来说,这里不应该是0和2嘛(一个先用再加,一个先加再用)。

在C语言中,对于函数参数的 计算顺序是未定义 的(Undefined Behavior)。这意味着在 printf 中的 i++ 和 ++i
的计算顺序是不确定的。编译器可能会按照自己的规则来计算参数,而这些规则可能会导致不同的结果。

具体来说,i++ 和 ++i 都会使 i 的值增加,但是它们的行为略有不同。i++ 是后置递增操作符,它会返回 i 的当前值然后再将 i 的值增加1。而
++i 是前置递增操作符,它会先将 i 的值增加1,然后返回增加后的值。

因此,printf 中的参数计算顺序是未定义的,编译器可能会按照自己的规则来计算。在某些编译器中,可能会先计算 i++,然后再计算 ++i,因此结果是 1,
1。而在其他编译器中,可能会先计算 ++i,然后再计算 i++,结果可能会不同。

为了避免这种不确定性,最好避免在同一个表达式中混合使用递增操作符,尤其是在函数调用中。可以将递增操作符分开,或者使用额外的变量来保存中间结果。

可以看到运算依旧是1和1。

** 关于这个问题具体是怎么产生具体没有研究过,如果广大观众朋友们有了解的朋友可以私信我感谢。 **

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容