"x = &v"和"*x = v"是否等效?

Are `x = &v` and `*x = v` equivalent?

本文关键字:是否      更新时间:2023-10-16
int * x;
int v = 7;

给定此代码,两者之间有什么区别 1.x = &v和 2.*x = v? 我知道在这两种情况下,*x都包含7但在这两种情况下x都包含v的内存位置吗?如果不是,x在案例 1 和 2 中包含什么,这是两者之间唯一的显着区别吗?

给定语句:

int v = 7; 

v内存中有一些位置。行为:

x = &v;

x"指向"v的内存位置,实际上*x将具有值7

但是,在此声明中:

*x = v;

您将v的值存储在x指向的地址处。但是x没有指向有效的内存地址,因此此语句调用未定义的行为。

所以要回答你的问题,,这两个陈述并不等同。

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

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

&表示地址。

*表示价值在。

x = &vv的地址被分配给x

*x = v-x处的值(地址x处的值(被分配值v

这两个是非常不同的说法。

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

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

第一个为x赋值。第二个具有未定义的行为。

int v=7;

假设地址 v = 00ZXCDFCDGDD2345

int x=&v;

这里的'&'表示地址和x用于存储地址*(00ZXCDFCDGDD2345)*,而x本身存储在某个位置表示*00254DBHJBDHDW*

现在,如果我们想访问 v 的值,我们使用指针。

int *x=v;

在此语句中,'*x' 是一个指向 v 的指针变量,表示它存储v的值,但 x 本身是未定义的,它存储垃圾值。 因此,两者都是不同的。