`x = &v`和`*x = v`是否等同?

问题描述 投票:0回答:1
int * x;
int v = 7;

给出这段代码,1.和2.之间有什么区别?x = &v 和2.的区别是什么?*x = v ? 我理解,在这两种情况下。*x 包含 7 但是否 x 含有内存位置的 v 在这两种情况下?如果不是,那是什么?x 包含在情况1和2中,这是否是两者之间唯一的显著区别?

c++ pointers
1个回答
19
投票

给定语句。

int v = 7; 

v 有一些位置在内存中。这样做。

x = &v;

将 "指向" x 的内存位置。v事实上 *x 将具有 7.

然而,在这个语句中

*x = v;

你存储的是 v 所在的地址 x. 但是... x 指向一个有效的内存地址,所以这个语句调用了未定义的行为。

所以为了回答你的问题。没有,这2个语句是不等价的。


14
投票

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

*x = v 修改x所指向的对象。在本例中,x并没有指向任何东西,因为指针是未初始化的。因此,行为是未定义的。


6
投票

& 指的是地址。

* 意味着在的值。

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

*x = v - 临界值 x (地址处的数值) x)被分配的值是 v.


5
投票

这两种说法截然不同。

最初 x 将包含垃圾值。因此 *x 将试图取消引用一个未初始化的地址,并将导致一个未定义的行为(在大多数情况下是一个分段故障),如 *x 指的是未初始化的东西。因此: *x = v 赋值在 v 所指向的位置。x.

其中 x = &v, x 的地址,将包含 v. 从这一点来说 x 的地址,包含 v, *x 将指的是 v. 因此,这个说法是正确的。故此。x = &v 的地址。v 作为 x.


3
投票

第一个给 x. 第二种行为未定义。


1
投票

int v=7;

假设v的地址=00ZXCDFCDGDD2345。

int x=&v;

这里的"& "指的是地址和。x 是用来存储地址的 *(00ZXCDFCDGDD2345)*和x本身存储在某个位置,比如说 *00254DBHJBDHDW*.

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

int *x=v;

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

© www.soinside.com 2019 - 2024. All rights reserved.