C语言:关于自加自减

发布时间:2024-05-10 12:45 发布:上海旅游网

问题描述:

1.自加自减语句(如j++;)是不是赋值语句呢?
2.执行int a=2; ((a++)*(a++)*(a++))后为什么a=5呢?我觉得是3啊。。。

问题解答:

首先,对于第一个问题我的答案是:否。
因为严格的讲,赋值运算中必须有赋值运算符“=”,就像你题目中的所说的那是自增自减语句。但是呢,他的结果又相当于一个赋值运算的结果。要不为啥说C灵活呢,是吧,呵呵
对于第二个问题,我的答案是:都对!!!!!
因为,这完全取决于你所使用的编译器,不同的编译器对上述表达式的运算结果是不同的。
有的运算器是那三个自增运算同时进行,这时答案就是3;有的编译器对那三个自增运算的运算顺序是从左到右的,这时的答案就是5.
明白了吧,呵呵

1是,j++相当于j=j+1;
2:加了3次a++

不同的编译器结果不一样。

根据《C语言规则》
①是。j++;等价于j=j+1; , j--;相当于j=j-1;
所以自加自减语句都是赋值语句。
②int a=2; /*定义了整型变量a,并赋了初值2*/
((a++)*(a++)*(a++)); /* 假设令t=((a++)*(a++)*(a++)),
则 t=8 */
因为每一个相乘的因子都使用了一次,所以a在里面都自增了一次。
即: a=a+3=5

热点新闻