如何在程序中稍后使用丢弃的值

hac*_*cks 1 c expression

关于表达式声明(示例)

i = 1;
Run Code Online (Sandbox Code Playgroud)

据说分配后1i 整个表达式的值被丢弃.例如,如果该值被丢弃,那么以后如何在程序中使用它

printf("%d",i);
Run Code Online (Sandbox Code Playgroud)


我知道这是很基本的问题,但我与真糊涂丢弃.

Ela*_*zar 5

表达式的值确实被丢弃了,但是这个表达式有副作用 - 它改变了值的值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的值),因此编译器不会忽略它.