变量赋值是一个语句还是表达式?

时间:2017-09-23 01:25:43

标签: c expression language-lawyer variable-assignment

我很熟悉语句某事并且表达式是“构成数量的符号集合”(What is the difference between an expression and a statement in Python?)。我的问题是:当你为变量赋值时,是赋值语句还是表达式?

例如(在C中):

int x = 5;

2 个答案:

答案 0 :(得分:8)

好吧,当你说

int x = 5;

声明,恰好包含初始化

但如果你说

x = 5

这是表达式。如果你在它后面加一个分号:

x = 5;

现在它是声明

表达式语句可能是C程序中最常见的语句类型。表达式语句只是任何表达式,后面都带有分号。因此,有很多东西可能看起来像其他类型的语句,它们实际上只是表达式语句。也许最好的例子是经典

printf("Hello, world!\n");
许多人可能会认为这是一个"打印声明"。但它实际上只是另一个表达式语句:一个由单个函数调用组成的简单表达式

printf("Hello, world!\n")

再次跟着分号。

答案 1 :(得分:0)

粗略地说,在C;

  • 语句是产生可观察效果的代码段;
  • 表达式是一种代码构造,它访问至少一个数据项,执行该访问(或那些访问)的结果的某些操作,并产生至少一个结果。表达式可以由(较小的)表达式组成。

表达式语句是一个具有评估表达式的单一目的的语句 - 尽管该表达式可能是任意复杂的(包括由其他表达式组成)。还有其他类型的语句,例如跳转语句(例如goto),标签语句(例如goto的目标),做出决策的选择语句(例如switch,{{ 1}})和迭代语句(例如循环)等

像......一样的声明。

if

定义名为 int x = 5; 的变量,并使用表达式x对其进行初始化。 5是字面值。

如果先前已声明5

x

是一个简单的表达式语句 - 它的唯一目的是评估赋值表达式。同样, x = 5; 是一个值为5的文字。因此5是一个表达式,它将x = 5指定为值x。结果是值5,这就是表达式语句

的原因
5

都指定 printf("%d\n", (x = 5)); 具有值x并打印值5