c++中++和*的优先级、cout运算从右到左
来源:互联网 发布:linux chown -r 编辑:程序博客网 时间:2024/06/07 04:46
运算符优先级
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
基本的优先级需要记住:
指针最优,单目运算优于双目运算。如正负号。
先乘除(模),后加减。
先算术运算,后移位运算,最后位运算。
请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
逻辑运算最后计算。
例子:
#include <iostream>using namespace std;int main(){ char s[] = "012345678", *p = s; cout << *p++ << *(p++) << (*p)++ << *++p << *(++p) <<++*p << ++(*p) << endl; p = s; cout << *p++ << endl; cout << *(p++) << endl; cout << (*p)++ << endl; cout << * ++p << endl; cout << *(++p) <<endl; cout << ++*p << endl; cout << ++( *p) <<endl; return 0;}
结果:
说明:
cout的运算是从右向左进行的,但最后输出还是从左到右。所以,
cout << p++ << (p++) << (p)++ << ++p << *(++p) <<++*p << ++(*p) << endl;
依次++(p),++*p,(++p),++p,(*p)++,(p++), *p++ ,最后再反着输出。
1.++*p:P指向S[0],并把S[0]加1做为表达式的值,所以输出为1,此时S[0]==’1’
2.++(*p):P还指向S[0](S[0]现在的值为1),并把S[0]加1做为表达式的值,所以输出为2,此时S[0]==’2’
3.*(++p):p指向S[1],然后取S[1]的值作为表达式的值,输出’1’
4.*++p :P指向S[2],然后取S[2]的值作为表达式的值,输出’2’
5.(*p)++:P还是指向S[2],取S[2]的值作为表达式的值,所以输出’2’,然后S[2]的值加1,S[2]==3
6.*(p++):P还是指向S[2](现值为3),取S[2]的值作为表达式的值,所以输出’3’,然后P指向S[3]
7.*p++ :P指向S[3],取S[3]的值作为表达式的值,所以输出’3’,然后P指向S[4];
最后反着输出为3322121
此数组S的值为”213345678”.所以后面的输出就是这些值了。
- c++中++和*的优先级、cout运算从右到左
- c中运算符&&和||的优先级
- C++中Cout<<的运算符重载后优先级问题
- c语言中运算符的优先级和求值顺序
- Java和C中运算符优先级
- c语言中运算符的优先级
- C语言中运算符的优先级
- C语言中运算符的优先级
- C和C++的运算符优先级
- C++,cout和std::cout的区别
- C# 中 运算符优先级
- C中运算符优先级
- C ++的运算符优先级
- C语言的运算优先级
- C/C++中cout和printf的运行机制
- C语言中运算符的优先级排序表
- C语言中容易出错的优先级运算
- C语言中运算符的优先级问题
- .net core 导出excel
- laravel学习之路2: jwt集成
- npm模块之http-proxy-middleware使用教程(译)
- HDU 6105 Gameia
- 网易2017秋招编程题
- c++中++和*的优先级、cout运算从右到左
- hibernate 映射关系小模板
- 准备:安装、创建项目、APP
- 一次面试引发的问题:激活函数Relu,sigmoid ,tanh的角逐
- 简单内存池设计与实现
- 润乾V5批量直接打印 报错误400 且参数不生效
- java 常用的正则表达式
- oracle触发器实例及异常处理
- c++常见面试题(1)