关于表达式语句(示例)
i = 1;
据说在分配1
给i
整个表达式的值之后被丢弃。如果该值被丢弃,那么稍后如何在程序中使用它,例如
printf("%d",i);
?
我知道这是一个非常基本的问题,但我真的对discarded感到困惑。
关于表达式语句(示例)
i = 1;
据说在分配1
给i
整个表达式的值之后被丢弃。如果该值被丢弃,那么稍后如何在程序中使用它,例如
printf("%d",i);
?
我知道这是一个非常基本的问题,但我真的对discarded感到困惑。
表达式的值确实被丢弃了,但是这个表达式有一个副作用——它改变了 的值i
。因此,下次访问此变量时,您将读取新值,即 1。
foo(5);
当你做类似甚至简单的事情时,“丢弃”这个词更有帮助"hello";
。由于表达式"hello"
没有任何副作用,并且它的值被丢弃,所以它绝对什么都不做。当编译器遇到它时,作为独立语句:
"hello";
它可能会完全忽略它,就好像它根本不存在一样。这是调用函数或使用运算符时发生的情况:
4+5;
sin(2.6);
这些表达式也没有副作用,它们的值被忽略。当你做类似的事情时
printf("hello");
这也是一种表达方式。它的值是写入的字符总数。该值被忽略。但是不能完全忽略该表达式,因为它有一个重要的副作用:它将这些字符打印到标准输出。
所以让我们构建一个函数而不是使用赋值运算符(因为 C 没有引用,我们将使用指针):
int assign_int(int* var, int value) {
*var = value;
return *var;
}
现在,回到您的示例,您可以执行以下操作:
assign_int(&i, 1);
从返回的值assign_int
被丢弃。就像printf()
本案一样。但由于该函数assign_int
有副作用(改变 i 的值),编译器不会忽略它。
重要的一点是i = 1
有两个属性。
i
为 1第二部分很有趣是这样的案例
if ( (i=1) == 2 ) { // ...
或者
y = 3 + (i = 1); // assign 4 to y
线
整个表达式的值被丢弃。
指表达式的值(我的#2),但不影响对变量的赋值i
(我的#1)。