什么是逗号分隔的分配?

j r*_*riv 12 c

我在常规中注意到了

else 
  *pbuf++ = '%', *pbuf++ = to_hex(*pstr >> 4), *pbuf++ = to_hex(*pstr & 15);
Run Code Online (Sandbox Code Playgroud)

它为什么有效?

它有什么作用?

ice*_*ime 12

逗号运算符是一个序列点:从左到右计算每个逗号分隔的表达式.结果具有右操作数的类型和值.从功能上讲,你的例子相当于(更具可读性)?

else
{
    *pbuf++ = '%';
    *pbuf++ = to_hex(*pstr >> 4);
    *pbuf++ = to_hex(*pstr & 15);
}
Run Code Online (Sandbox Code Playgroud)

这是标准为逗号运算符提供的另一个示例(6.5.17):

在函数调用中

f(a, (t=3, t+2), c)
Run Code Online (Sandbox Code Playgroud)

该函数有三个参数,第二个参数的值为5.


小智 9

来自维基百科:

在C和C++编程语言中,逗号运算符(由标记表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型).逗号运算符具有任何C运算符的最低优先级,并充当序列点.

使用逗号标记作为运算符不同于它在函数调用和定义,变量声明,枚举声明和类似结构中的使用,它用作分隔符.

在此示例中,第二行和第三行之间的不同行为是由于逗号运算符的优先级低于赋值.

int a=1, b=2, c=3, i;   // comma acts as separator in this line, not as an operator
i = (a, b);             // stores b into i                                ... a=1, b=2, c=3, i=2
i = a, b;               // stores a into i. Equivalent to (i = a), b;     ... a=1, b=2, c=3, i=1
i = (a += 2, a + b);    // increases a by 2, then stores a+b = 3+2 into i ... a=3, b=2, c=3, i=5
i = a += 2, a + b;      // increases a by 2, then stores a = 5 into i     ... a=5, b=2, c=3, i=5
i = a, b, c;            // stores a into i                                ... a=5, b=2, c=3, i=5
i = (a, b, c);          // stores c into i                                ... a=5, b=2, c=3, i=3
Run Code Online (Sandbox Code Playgroud)

链接:http://en.wikipedia.org/wiki/Comma_o​​perator

  • 在“ i = a,b;”中,“ b”发生了什么?在这种情况下为什么要写`b`? (2认同)