C中如何存储变量值?

Isa*_*h G 7 c variables reference

假设我有以下 C 代码:

int x= 4;
int y = x;
printf("x:%d,y:%d\n",x,y);
Run Code Online (Sandbox Code Playgroud)

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

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

orl*_*rlp 7

你的理解是完全错误的。

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

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

所有语言都一样吗?

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

  • @orlp:指针提供引用。C 标准是这么说的(C 2018 6.2.5 20)。请不要将 C++ 中采用术语“引用”的新功能与 C 中过去和现在对该术语的使用相混淆。 (2认同)

Ale*_*ica 5

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: %d\n", x, *y);
    
    x = 123; // modify x
    
    printf("after:  x: %d, y: %d\n", x, *y);
}
Run Code Online (Sandbox Code Playgroud)