北郡 发表于 2019-8-5 14:19:46

关于i++的问题

本帖最后由 北郡 于 2019-8-5 14:23 编辑

程序和执行结果如图

既然square函数传入的是i++,那么(i++)*(i++)执行完以后,i就应该自增两次,加2才对。
为什么printf("%d的平方是%d\n", i-1, square(i++));里面是i-1呢?


求助,谢谢!

micolar 发表于 2019-8-5 14:55:08

既然square函数传入的是i++,那么(i++)*(i++)执行完以后,i就应该自增两次,加2才对。
square函数虽说你写的是i++ 实际上是把i的值传入 然后再++ 而不是传入i++表达式

为什么printf("%d的平方是%d\n", i-1, square(i++));里面是i-1呢
这条语句先计算 i++由于是后缀++ 所以先square(i) 再++ 再计算i-1
你可以用这条语句看看
printf("%d%d   %d%d\n",i - 1,square(i++),square(i--),square(i++));
这些都是编译器的问题 既然是编译器的问题 所以它随时可被修改 所以不要太纠结
页: [1]
查看完整版本: 关于i++的问题