C中如何存储变量值?

假设我有以下 C 代码:

int x= 4;
int y = x;
printf("x:%d,y:%dn",x,y);

X 现在引用存储“4”的内存位置并打印为 4。y 引用 x 所以它也会打印 4。那么为什么当我更改 x 的值时,例如x=6;,y 也不会改变? 我一定是误会了什么。所有语言都一样吗?

我在任何地方都找不到我的问题的答案(可能是因为措辞不当)。

回答

你的理解是完全错误的。

写入时int x = 4;x表示堆栈上的实际内存位置,然后用值填充4x与那段记忆不可撤销地联系在一起 - 当x超出范围时,记忆也会消失。

当你int y = x;再次写入时y代表了一块实际的内存。它不“是指”来x,取而代之的是,内容x复制y

所有语言都一样吗?

不,不同的语言可以而且确实具有完全不同的语义。然而,C 的方式通常称为值语义

  • @orlp: Pointers provide references. The C standard says so (C 2018 6.2.5 20). Please do not confuse the new feature in C++ that it adopted the term “reference” for with past and ongoing uses of the term in C.

回答

y从不引用x。赋值运算符=复制值。x只是4,int类型的值。int y = x正在将 x 的当前值分配给 y,并在此过程中复制它。

要表现得像您所描述的那样,y需要是一个指向 int, 的指针int *,并且它将被分配 的地址x,如下所示:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int x = 4;
    int *y = &x;
    
    
    printf("before: x: %d, y: %dn", x, *y);
    
    x = 123; // modify x
    
    printf("after:  x: %d, y: %dn", x, *y);
}


以上是C中如何存储变量值?的全部内容。
THE END
分享
二维码

)">
< <上一篇
下一篇>>