关于自增(减)操作的发生时机
第一个例子
#include <iostream>
using namespace std;
int main()
{
int i,j;
i=j=3;
cout << i++ << "," << i << endl;
cout << i << endl;
cout << ++j << "," << j << endl;
cout << j << endl;
return 0;
}
第二个例子
#include <iostream>
using namespace std;
int main()
{
int n1,n2;
n1=n2=3;
n2=n1++,n2++,++n1;
cout << "n1=" << n1 << endl;
cout << "n2=" << n2 << endl;
return 0;
}
第三个例子
#include <iostream>
using namespace std;
int main()
{
int x=4,y=25,z=2;
z=(--y/++x)*z--;
cout << "x=" << x << endl;
cout << "y=" << y << endl;
cout << "z=" << z << endl;
return 0;
}
前加(减)是在表达式(或语句)执行之前运行,
后加(减)是在表达式(或语句)执行后完成的.
语句或','分割的表达式都会使后加(减)起作用了.
前加(减)++i优先级高于*/,顺序从右至左,先结合后运算.
后加(减)优先级低于*/及=,顺序从左至右,先运算后结合.
同一表达式中不影响自身.上面结果是:
3,3
4
4,3
4
n1 = 5, n2 = 4, x = 5, y = 24, z = 7
语句z=(--y/++x)*z--;分析为:
z = (((--y)/(++x))*z)--
z = (24/5)*2 - 1
整除 24/5 = 4 再 * 2 = 8 , 结果减 1 = 7.
后减(--)优先级低,运算最后完成.
其实还有一点需要注意的是,编译器的执行顺序.在gcc中是总右往左执行
分享到:
相关推荐
例如,在给定的代码段中,`if (++a > 0 || ++b > 0)`,如果`a`已经大于0,`b`的自增就不会发生。 方括号`[]`在定义数组时是语法的一部分,而在其他情况下作为索引访问运算符,如`a[i]`等价于`*(a+i)`。指针运算中,...
17. 运算符重载:自增自减运算符重载,前自增和后自增的区别在于返回值类型和操作时机。 18. 模板:用于创建泛型代码,适用于不同类型的数据。 19. 数据结构与算法: - 链表操作:不带头结点的链表操作需要注意头...
- **自增自减运算符**:`m++` 和 `m--` 在不同位置有不同的作用时机,会影响到表达式的求值顺序。 - **三目运算符**:在 C 语言中,`a>c?a:c?d=a>b:b` 优先级较低的操作符先计算,然后根据条件执行相应的操作。 -...
例如,“++x++”是不合法的,因为它同时试图在两个不同的时机对x进行自增操作。在教学中,应强调书写清晰的代码,明确每个运算符的作用时机,避免使用连续的递增或递减运算符,以免造成混淆和逻辑错误。 2. 取地址...
- 自增和自减操作符有两种形式:前缀形式(如`++x`)和后缀形式(如`x++`)。 - 前缀形式会先增加或减少变量的值,然后返回新的值;而后缀形式则会先返回原来的值,然后再增加或减少。 - 使用哪种形式取决于具体...
表达式中,赋值表达式的值为最左边的值,自增自减运算符(++和--)有前置和后置之分,影响值的使用时机。逗号表达式中,值为最后一个子表达式的结果。 位运算在C语言中用于直接操作二进制位,例如左移()表示乘以2...
- 自增和自减操作符有两种形式:前缀形式 (`++x`) 和后缀形式 (`x++`)。 - 前缀形式先递增或递减变量的值,然后再返回新的值;而后缀形式先返回原始值,再进行递增或递减。 - **Item 7:不要重载“&&”,“||”,或...
- **题目**: C 语言中, 数组名是一个不可变的什么量, 不能对它进行加减和赋值运算? - **解析**: 此题考查数组名的概念。 - 在C语言中, 数组名是一个不可变的地址。 - 数组名指向数组的第一个元素的地址, 不可修改...
- `++` 和 `--` 运算符用于自增或自减,可以放在变量前表示先进行运算再使用结果,放在变量后表示先使用变量的值再进行运算。 ### 3. 接口与多态 **题目解析:** 第5题涉及接口、类实现接口以及多态的概念: ```...