关于表达式声明(示例)
i = 1;
Run Code Online (Sandbox Code Playgroud)
据说分配后1
至i
整个表达式的值被丢弃.例如,如果该值被丢弃,那么以后如何在程序中使用它
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)
?
我知道这是很基本的问题,但我与真糊涂丢弃.
表达式的值确实被丢弃了,但是这个表达式有副作用 - 它改变了值的值i
.因此,下次您将访问此变量时,您将读取新值,即1.
当您执行类似foo(5);
甚至简单的操作时,"丢弃"一词更有用"hello";
.由于表达式"hello"
没有任何副作用,并且它的值被确定,它绝对没有任何作用.当编译器遇到它时,作为一个独立的声明:
"hello";
Run Code Online (Sandbox Code Playgroud)
它可能完全忽略它,就好像根本不存在一样.这是调用函数或使用运算符时发生的情况:
4+5;
sin(2.6);
Run Code Online (Sandbox Code Playgroud)
这些表达式也没有副作用,它们的值被忽略.当你做类似的事情
printf("hello");
Run Code Online (Sandbox Code Playgroud)
这也是一种表达方式.它的值是写入的字符总数.该值被忽略.但是这个表达式一定不能被忽略,因为它有一个重要的副作用:它将这些字符打印到标准输出.
所以让我们构建一个函数而不是使用赋值运算符(因为C没有引用,我们将使用指针):
int assign_int(int* var, int value) {
*var = value;
return *var;
}
Run Code Online (Sandbox Code Playgroud)
现在,回到你的例子,你做了类似的事情:
assign_int(&i, 1);
Run Code Online (Sandbox Code Playgroud)
返回的值assign_int
被丢弃.就像在这种printf()
情况下一样.但由于该函数assign_int
具有副作用(改变i的值),因此编译器不会忽略它.
归档时间: |
|
查看次数: |
224 次 |
最近记录: |