我有两个变量:x和x_ptr

假设我最初有以下内容:

Addr    Data    Variable

0x300    7      x
0x104           x_ptr

以下内容将产生什么:*x_ptr = &x;

据我了解,引用运算符&给出了该运算符后面的变量地址;解引用运算符*给出该运算符后面的变量中存储的存储位置的值。

因此,&x应该给出0x300,*x_ptr应该给出存储在内存位置0x300的值,即int 7

因此,我希望*x_ptr = &x;将x的内存地址存储到x_ptr中存储的内存位置中。

但是因为x_ptr最初没有存储任何值,所以应该产生错误,不是吗?

但是我的类笔记说这是预期的结果:
Addr    Data    Variable

0x300    7      x
0x104    0x300  x_ptr

我不明白为什么会这样。
如果我们希望x_ptr存储x的内存地址,我们不应该这样写:

改为x_ptr = &x

我已经查看了多个stackexchange答案,但看不到我要去哪里。

最佳答案

假设x的类型为intx_ptr的类型为int*,则表达式*x_ptr = &x无效。 *x_ptr的类型为int,而&x的类型为int。这些类型不匹配,因此分配无效。

表达式x_ptr = &x有效。它将x_ptr的值设置为x的地址。

10-08 11:39
查看更多