i++和++i的区别
#include<stdio.h>int main(void)
{
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d,%d,%d,%d",p,q,i,j);
return 0;
}
说明一下p,q,i,j的值,为什么我编译q的值是22,书上所说的是24?到底是哪一个?请高手指点,请说明详细原因!
本帖最后由 福禄娃娃 于 2013-7-31 20:45 编辑
编译器不同,结果可能不同。编译器优化后,指令变成了乱序执行。
使用VC6.0 q的值是22
分号是一个顺序点
尽量少使用这种多个自增的语句 不然会被编译器修改了值 定义变量的只能加上volitle防止编译器修改值.
区别就是后置i++直接算出p的值,p=5+5+5=15
前置++i 先i先自增两次i=7,再相加7+7=14,接着自增i=8,再相加 q=7+7+8=22
刚才用vs2010使用c++编译器编译的结果 q 为24,可见C和C++编译器处理方式不同,VC6.0使用的是.c,VS2010使用的是.cpp
是不是编译器有问题啊?还是有BUG啊!我想了一下午都没搞定,谁帮我啊:cry 编译器应该没问题啊!如果q = (++j) + (++j);结果就会正确q的值14,q = (++j) + (++j) + (++j);结果就变成22,问题就出现在这里!我就一直没弄明白这个原因! 一个是加一后搓泥一个是处理后加一 有意思{:1_1:} 没想到两个++的前后区别这么大。 分类: 前自增 --++i
后自增 --i++
相同: 最终都是i的值加1
不同:前自增整体表达式的值是i加1之后的值
后自增整体表达式的值是i加1之前的值
我是C新手米以上内容是郝斌C语言有讲到的区别,记不清哪一课了,这是我做的笔记 希望能帮到你
领教了,真的是大神多多啊 有一点我想说.我的18,21,8,8.请教下,咋个编译器不同,连运算方式都变了:dizzy::dizzy: #include<stdio.h>
int main(void)
{
int i = 5, j = 5, p, q;
p = (i++/*5*/) + (i++/*6*/) + (i++/*7*/);
//括号里面的是先赋值再自加1的p=5+6+7=18
q = (++j/*6*/) + (++j/*7*/) + (++j/*8*/);
//括号里面的是先自加1然后再参于运算的q=6+7+8=21
printf("%d,%d,%d,%d",p,q,i,j);
//正如前面所说反正结果都是8
return 0;
}
//不明白的是,i++,先赋值再运算,那么它是把值赋给它自己了吗?作为单独的代码,而不是类似y=i++的话.
页:
[1]