`x = &v` 和 `*x = v` 等价吗?

Arj*_*han 12 c++ pointers

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 个陈述是不等价的。


eer*_*ika 14

x = &v修改 x。操作后 x 将指向 v。

*x = v修改 x 指向的对象。在示例中, x 不指向任何内容,因为指针未初始化。因此,行为是未定义的。


Nit*_*ish 6

& 表示地址。

* 表示值在。

x = &v地址中v分配给x

In *x = v-the value at x(the value at the address x) 被赋值v


pho*_*xis 5

这两个是非常不同的陈述。

最初x将包含垃圾值。因此,*x将尝试取消引用未初始化的地址,并会导致未定义的行为(在大多数情况下是分段错误),因为*x指的是未初始化的内容。因此,*x = v将值分配给v指向的位置x

在 中x = &vx将包含 的地址v。从这一点开始x包含 的地址v*x将引用 中的值v。因此这个说法是正确的。因此,x = &v将 的地址分配v为 的值x