我刚刚开始使用C中的指针,我就挂了一些简单的东西。我想确保我理解正确。
说我有这样的事情:
int *buff;
从我读到的,
*buff refers to the value that buff is currently pointing to
&buff refers to the address
但我坚持的是:
“buff”是指什么?它是指内存中& buff的位置,它指向值* buff的位置?
非常感谢! :3
-jtsan
答案 0 :(得分:10)
int *
表示“指向int的指针”。所以,在这里,buff
是指向int的指针。为了简单起见,我们也说:
int x = 5;
int *buff = &x;
x
,一个整数,设置为5。
&x
表示“x的地址”。因此buff
包含x
的地址。为了论证,我们假设x
存储在内存地址0x1000。所以buff
本身也是一个数字:0x1000。
*buff
表示“buff指向的东西”,在这种情况下为5。
&buff
表示“buff的地址”:数字buff
本身存储在内存中的地址。
我想分享一下我用来学习指针在我开始时的工作原理的一般技巧。
拿一张大方格纸,纵向放在你面前的桌子上。这是你电脑的记忆。每个框表示一个字节。选择一行,并将数字“100”放在最左边的框下方。这是内存的“最低地址”。 (我选择100作为非0的任意数字,您可以选择另一个。)从左到右按升序对数字进行编号。
+---+---+---+---+---+-- | | | | | | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
现在,暂时假装一个int是一个字节大小。你是一台八位电脑。将您的int a
写入其中一个框中。方框下面的数字是它的地址。现在选择另一个包含int *b = &a
的框。 int *b
也是存储在内存中的变量,它是一个包含&a
的指针,发音为“a的地址”。
int a = 5;
int *b = &a;
a b +---+---+---+---+---+-- | 5 | |100| | | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
现在,您可以使用此模型直观地处理您看到的值和指针的任何其他组合。这是一种简化(因为正如语言学者所说,指针不是必然一个地址,内存不是必然顺序,并且有堆栈和堆和寄存器等等,但对于99%的计算机和微控制器来说,这是一个相当不错的类比。
你也可以扩展真正的四字节int
的模型......
int a = 5;
char b = 2;
a a a a b +---+---+---+---+---+-- | 0 | 0 | 0 | 5 | 2 | ... +---+---+---+---+---+-- 100 101 102 103 104 ...
答案 1 :(得分:4)
鉴于声明:
int value = 13;
int *buff = &value;
你是对的:
*buff == 13
因为buff
指向value
且包含13。
你可能误解了&buff
所指的内容;它是变量buff
的地址,因此&buff
的类型是int **
,指向整数的指针。相比之下,&value
是变量value
的地址;它的类型为int *
(因此初始化不需要任何强制转换 - 它的类型正确存储在buff
中)。
普通buff
是int *
或指向整数的指针。它包含变量value
的地址。
答案 2 :(得分:3)
* buff指的是buff当前指向的值
是强>
& buff指的是地址
否即可。如果你在想我认为你在想什么,至少不会。 &buff
不指的是当前指向的地址,&buff
指的是buff
本身所在的内存中的地址。
“buff”指的是什么?
buff
指的是您认为&buff
的内容,即buff
指向的地址。指针的值是它指向的地址。
以下是一些可以帮助您的示例:
int *buff;
- 声明指针
to int 目前没有
指向任何地方int foo; buff = &foo;
- 指向buff
foo的地址 *buff = 5;
- 改变
什么buff指向(foo)到5 int **buff_ptr = &buff;
- 声明
指向指向int 的指针的指针
并指出它的地址
浅黄色答案 3 :(得分:3)
buff被声明为“指向int的指针”。使用* buff就像说“什么buff指向”,即int值。使用& buff就像说“buff的地址”,它是指针的地址,指向int(另一个间接层)。
答案 4 :(得分:1)
您的正确性是*buff
指的是buff
指向的位置,但&buff
指的是buff
本身的地址。 &
指向(buff
)的数据的地址(*
)为*&buff
,或更常见的是buff
。