算子在C中做什么呢?
当前回答
我在while循环中见过最常用的:
string s;
while(read_string(s), s.len() > 5)
{
//do something
}
它会做手术,然后根据副作用做一个测试。另一种方法是这样做:
string s;
read_string(s);
while(s.len() > 5)
{
//do something
read_string(s);
}
其他回答
它导致对多个语句求值,但只使用最后一个语句作为结果值(我认为是右值)。
所以…
int f() { return 7; }
int g() { return 8; }
int x = (printf("assigning x"), f(), g() );
应该导致x被设置为8。
我在while循环中见过最常用的:
string s;
while(read_string(s), s.len() > 5)
{
//do something
}
它会做手术,然后根据副作用做一个测试。另一种方法是这样做:
string s;
read_string(s);
while(s.len() > 5)
{
//do something
read_string(s);
}
我看到它唯一有用的地方是当你写一个古怪的循环,你想在一个表达式(可能是init表达式或循环表达式)中做多个事情。喜欢的东西:
bool arraysAreMirrored(int a1[], int a2[], size_t size)
{
size_t i1, i2;
for(i1 = 0, i2 = size - 1; i1 < size; i1++, i2--)
{
if(a1[i1] != a2[i2])
{
return false;
}
}
return true;
}
如果有任何语法错误,或者我混合了任何不是严格c的东西,请原谅,我不是说,操作符是一种很好的形式,但这就是你可以使用它的原因。在上面的例子中,我可能会使用while循环,这样init和loop上的多个表达式会更明显。(我将内联初始化i1和i2,而不是声明然后初始化....等等等等。)
表达式:
(expression1, expression2)
首先求出expression1的值,然后求出expression2的值,然后返回整个表达式的expression2的值。
我恢复这个只是为了回答@Rajesh和@JeffMercado的问题,我认为这很重要,因为这是搜索引擎的热门之一。
以下面的代码片段为例
int i = (5,4,3,2,1);
int j;
j = 5,4,3,2,1;
printf("%d %d\n", i , j);
它会打印出来
1 5
对于i的情况,大多数答案都是这样解释的。所有表达式都按从左到右的顺序求值,但只有最后一个表达式被赋值给i。(表达式)的结果是1 '。
j大小写遵循不同的优先级规则,因为,具有最低的运算符优先级。因为这些规则,编译器看到赋值表达式,常量,常量....表达式再次按从左到右的顺序求值,并且它们的副作用仍然可见,因此,由于j = 5, j = 5。
有趣的是,int j = 5,4,3,2,1;语言规范不允许。初始化式需要赋值表达式,因此不允许使用直接操作符。
希望这能有所帮助。