在C语言中逗号运算符可以将两个表达式连接起来
int n = 3+5, 6+ 10; // 此时 n = 16 ,
称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1, 表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5, 6+ 10”的值为16。
例子 : a=3*5,a*4
, 注意重点 : 逗号运算符优先度最低,比赋值运算符低。
对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4
” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5
”是一个赋值表达式”,“a*4
”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?
赋值运算符的优先级别高于逗号运算符, 因此应先求解a=3*5
(也就是把“a=3*5
”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4
,得60。整个逗号表达式的值为60。
下面在将两个例子:
x = (a = 3, 6 * 3);
x = a = 3, 6 * a;
- 是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。
- 包括一个赋值表达式和一个算术表达式,x的值为3。
下面用一个程序看看
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int a = 1, b = 2, c = 3;
cout << (a, b, c) << b << c << endl; // 323
// 逗号运算符 优先级最小
int x = (a = 3, 6 * 3);
cout << x << endl; // 18
return 0;
}
另外附上我的github仓库:https://github.com/acelj/Notes
分享关于C++基础知识,智能指针,内存四区, 数据结构和算法,linux, mysql,redis等等。