我正在检查学生的作业。 分配是将大量英文字母打印到控制台。 出于某种原因,他所做的工作(第7行):
int main(void)
{
char first = 'A';
char last = 'Z';
int amount = 0;
amount = ("%d - %d", last - first + 1);
printf("The amount of letters in the English alphabet is %d\n", amount);
return(0);
}
看到它之后,我尝试将其他东西放在括号中,而不是“%d - %d”。无论我放在那里以及有多少逗号,它只会在最后一个逗号之后(这是正确的句子)。
那里到底发生了什么?
答案 0 :(得分:3)
这是comma operator的使用示例之一。在
的情况下 ("%d - %d", last - first + 1);
计算逗号运算符("%d - %d"
)的LHS操作数,结果被丢弃,然后计算RHS(last - first + 1
)并作为结果返回。然后,结果会分配给amount
,因此,amount
会保留操作last - first + 1
的结果。
引用C11
,章节§6.5.17,逗号运算符
逗号运算符的左操作数被计算为
void
表达式;有一个 其评估与右操作数之间的序列点。然后是正确的 操作数被评估;结果有其类型和价值。
FWIW,在这种情况下,"%d - %d"
只是另一个字符串文字,它不带任何特殊含义。