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 也不会改变? 我一定是误会了什么。所有语言都一样吗?
我在任何地方都找不到我的问题的答案(可能是因为措辞不当)。
你的理解是完全错误的。
写入时int x = 4;,x表示堆栈上的实际内存位置,然后用值填充4。x与那段记忆不可撤销地联系在一起 - 当x超出范围时,记忆也会消失。
当你int y = x;再次写入时y代表了一块实际的内存。它不“是指”来x,取而代之的是,内容的x被复制成y。
所有语言都一样吗?
不,不同的语言可以而且确实具有完全不同的语义。然而,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: %d\n", x, *y);
x = 123; // modify x
printf("after: x: %d, y: %d\n", x, *y);
}
Run Code Online (Sandbox Code Playgroud)