关于C#:变量赋值是一个语句还是表达式?

Is variable assignment a statement or expression?

我很熟悉语句可以做一些事情,表达式是"组成一个数量的符号集合"(在Python中表达式和语句之间的区别是什么?)我的问题是:当你给变量赋值时,赋值是语句还是表达式?

例如(在c中):

1
int x = 5;


嗯,当你说

1
int x = 5;

这是一个声明,刚好包括初始化。

但是如果你说

1
x = 5

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

1
x = 5;

现在这是一个声明。

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

1
2
printf("Hello, world!
"
);

许多人可能认为这是一个"打印声明"。但实际上它只是另一个表达式语句:由单个函数调用组成的简单表达式

1
2
printf("Hello, world!
"
)

后面再跟一个分号。


粗略地说,用c表示;

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

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

像这样的声明;

1
 int x = 5;

定义名为x的变量,并用表达式5初始化它。5是一个文字值。

如果之前已经宣布过x

1
 x = 5;

是一个简单的表达式语句-其唯一目的是评估赋值表达式。5也是一个值为5的文字。因此,x = 5是一个表达式,它将x赋值为5的值。结果是值5,这就是为什么表达式语句

1
2
 printf("%d
"
, (x = 5));

两者都将x赋值为5,并打印5的值。