我有两个变量: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
的类型为int
和x_ptr
的类型为int*
,则表达式*x_ptr = &x
无效。 *x_ptr
的类型为int
,而&x
的类型为int
。这些类型不匹配,因此分配无效。
表达式x_ptr = &x
有效。它将x_ptr
的值设置为x
的地址。