首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于++运算符的疑点,大家赐教

2013-08-14 
关于++运算符的疑问,大家赐教。#includeiostream.hvoid main(){intz 3intc0c (++z) + (++z) cout

关于++运算符的疑问,大家赐教。


#include<iostream.h>

void main()
{
    int  z= 3;
    int  c=0;
    c = (++z) + (++z) ;
    cout<<c<<endl;
    cout<<z<<endl;
}

   原以为C的值应该是4+5=9;运行结果是10;答案给的解析如下:
    这个涉及到两个知识点:
    第一个是++运算,放在前面的话是用++后的值参与运算
    第二个是优先级,小括号的优先级最高,所以要先算,第一个小括号运算完成后z为4,第二个小括号运算完后z为5。
    两次++运算完后,因为是同一个变量,再内存中只有一份,所以前面括号的值和后面括号的值都为5,再做中间的加法运算,此时就成了5+5,所以结果是10。意思是说是同一个变量在内存中只有一份,所以c的值应该是5+5=10;之后我把代码改至如下:

#include<iostream.h>

void main()
{
    int  z= 3;
    int  c=0;
    c = (++z) + (++z)+(++z) ;
    cout<<c<<endl;
    cout<<z<<endl;
}

   按照上面答案的分析:第一个小括号运算完成后z为4,第二个小括号运算完后z为5,那么第三个小括号算完后z的值为6,三次++运算完后,因为是同一个变量,在内存中只有一份,所以前面括号的值和后面括号的值都为6,再做中间的加法运算,此时就成了6+6+6,所以结果是18。
   但是在VC6.0下面运行的结果是16。这下就不明白了,大家能否告诉我,这具体执行的过程。 C
[解决办法]
楼主请看本版置顶帖,我给你总结如下:

1.这类问题没有任何意义,因为C标准里面没有规定这个表达式会得到什么结果,编译器有权自己决定计算顺序,不同的编译器可以得到不同的结果,也就是说,你所看到的书上的这类题目,都是错题

2.即使结果是确定的,也不需要纠结这类题,这跟打基础没关系,因为这样的语句是绝对不应该出现在实际程序里的,属于非常差的代码,跟“茴字的四种写法”一样,完全是卖弄

热点排行
Bad Request.