Ely*_*Ely 7 c variable-assignment
我在考试中看到了这一点,当我尝试时,我很惊讶.我在网上尝试过,它也有效.所以我认为这是C语言.
为什么这样?这种赋值语法的用例是什么?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int i = (1,2,3,4,5);
printf("%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这些不是"多个整数",而是逗号运算符.整个括号部分是一个单独的表达式,每个子表达式(用逗号分隔)严格从左到右进行评估.除最右边的子表达式之外的所有结果都被忽略.整个表达式的结果是最后(最右边)表达式的结果.这是整数值5.
请注意,此运算符主要用于只允许单个表达式添加进一步副作用的情况.例如在一个循环中:
int cnt = 0;
for ( const char *cp = "Hello" ; *cp != '\0' ; cp++, cnt++ ) ;
Run Code Online (Sandbox Code Playgroud)
这会计算C字符串中的字符数,递增指针以及cnt每次迭代后.这里忽略了结果.
所以,这是没有丝毫关系的元组或类似像Python编写的.实际上没有任何情况下使用此运算符是不可避免的,应谨慎使用 - 并且某些编码标准禁止使用它.
那是工作中的逗号运算符.它评估左侧的表达式,创建一个序列点,丢弃表达式的值,然后计算右侧的表达式,并将其作为值返回.如示例中有多个表达式,则依次计算每个表达式,并保留最后一个表达式.使用该示例,编译器会执行评估,因为每个值在编译时都是已知的.请注意,函数的参数列表不是逗号运算符的使用.
这不是逗号运算符的有效用例.可能是更接近有效的用例的是一些需要排序的副作用(例如函数调用)的操作以及分配的最终值:
int i = (getchar(), getchar(), getchar());
Run Code Online (Sandbox Code Playgroud)
i如果要读取的标准输入中没有剩下三个字符,则设置为标准输入中的第三个字符,或EOF.仍然不是一个现实的用例,但比分配常量列表更好.
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |