int * x;
int v = 7;
给出这段代码,1.和2.之间有什么区别?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
是 不 指向一个有效的内存地址,所以这个语句调用了未定义的行为。
所以为了回答你的问题。没有,这2个语句是不等价的。
x = &v
修改x,操作后x将指向v。
*x = v
修改x所指向的对象。在本例中,x并没有指向任何东西,因为指针是未初始化的。因此,行为是未定义的。
&
指的是地址。
*
意味着在的值。
在 x = &v
地址 v
分配给 x
.
在 *x = v
- 临界值 x
(地址处的数值) x
)被分配的值是 v
.
这两种说法截然不同。
最初 x
将包含垃圾值。因此 *x
将试图取消引用一个未初始化的地址,并将导致一个未定义的行为(在大多数情况下是一个分段故障),如 *x
指的是未初始化的东西。因此: *x = v
赋值在 v
所指向的位置。x
.
其中 x = &v
, x
的地址,将包含 v
. 从这一点来说 x
的地址,包含 v
, *x
将指的是 v
. 因此,这个说法是正确的。故此。x = &v
的地址。v
作为 x
.
第一个给 x
. 第二种行为未定义。
int v=7;
假设v的地址=00ZXCDFCDGDD2345。
int x=&v;
这里的"& "指的是地址和。x 是用来存储地址的 *(00ZXCDFCDGDD2345)*
和x本身存储在某个位置,比如说 *00254DBHJBDHDW*
.
现在,如果我们要访问v的值,我们使用指针。
int *x=v;
在这个语句中,'*x'是一个指针变量,它指向的是 v,意味着它存储的是v的值,但x本身是未定义的,它存储的是垃圾值。因此两者是不同的。