int * x;
int v = 7;
Run Code Online (Sandbox Code Playgroud)
鉴于此代码, 1.x = &v和 2.之间有什么区别*x = v?我知道在这两种情况下,都*x包含7但确实x包含v两种情况下的内存位置?如果不是,x案例 1 和案例 2中包含什么,这是两者之间唯一的显着差异吗?
cig*_*ien 19
鉴于声明:
int v = 7;
Run Code Online (Sandbox Code Playgroud)
v在内存中有一些位置。正在做:
x = &v;
Run Code Online (Sandbox Code Playgroud)
将“指向”x的内存位置v,并且确实*x具有值7。
但是,在此声明中:
*x = v;
Run Code Online (Sandbox Code Playgroud)
您将 的值存储在v指向的地址处x。不过x是不是指向一个有效的内存地址,因此该语句调用不确定的行为。
所以要回答你的问题,不,这 2 个陈述是不等价的。
& 表示地址。
* 表示值在。
在x = &v地址中v分配给x。
In *x = v-the value at x(the value at the address x) 被赋值v。
这两个是非常不同的陈述。
最初x将包含垃圾值。因此,*x将尝试取消引用未初始化的地址,并会导致未定义的行为(在大多数情况下是分段错误),因为*x指的是未初始化的内容。因此,*x = v将值分配给v指向的位置x。
在 中x = &v,x将包含 的地址v。从这一点开始x包含 的地址v,*x将引用 中的值v。因此这个说法是正确的。因此,x = &v将 的地址分配v为 的值x。