所以,我有我的指针:
int *p = new int(10);
我打印出以下内容:
&p which is: 0xbdee018
p which is: 0xb8c254b0
&p
代表指针的地址,p
代表指针本身的映射值的地址。
这是正确的,还是恰恰相反?
答案 0 :(得分:5)
是的确切。 &
给出了元素的地址。
所以
p
给出当前里面的值变量 - p
是一个指针,你得到一个指针(到一个int)&p
返回p
以图形方式
p value = 0xb8c254b0 --> int x 10
^
|-------- 0xbdee018
答案 1 :(得分:3)
是的,你是对的。
&p
代表指针的地址,p
给出指向的地址。
答案 2 :(得分:2)
p
表示整数的地址,例如int*
。
*p
表示存储在p
(解除引用)的整数,例如int
。
&p
表示指针p
的地址。如果p
为int
,则可以通过引用p
来获取指向int的指针,例如int*
。
答案 3 :(得分:2)
是的,你完全正确。
& p是指针的地址,或者你可以说指针的指针。
p是10个int元素数组的指针。
答案 4 :(得分:1)
我认为你正在以正确的方式得到东西。指针必须存储在某处,所以它也有一个地址。尝试使用调试器查看内存,使用示例中显示的地址,指向地址
0xbdee018
并检查字节,你应该在某些命令中看到字节:
0xb8c254b0
即p
。
字节的顺序取决于您正在使用的cpu的“endianity”
答案 5 :(得分:1)
指针是variable
,用于存储指针指向的address of other variable
。此变量本身也具有内存地址,在这种情况下,如果变量名称为&p
,则为p
。所以:
“& p”代表指针的地址,“p”代表指针本身的映射值的地址。
你是对的。此外,*p
将获得它指向的对象的值。您可能会发现Binky Pointer Fun Video有用。
答案 6 :(得分:1)
是的,似乎你做对了。
说明:
int i = 42;
int * pointer_to_i = &i;
然后:
i == 42 // obvious
&i == pointer_to_i // address, where a value 42 is stored
// for the sake of example, let's assume
// that &i == 0x12345678
&pointer_to_i // address, where a value 0x12345678 is stored
此外:
&<name>
获取变量<name>
的地址(您可以将其指定给指针); *<pointer>
取消引用 <pointer>
,即检索存储在该指针指向的位置的实际数据。答案 7 :(得分:1)
P是指向int的指针。(* p)表示指针p处的值,它将是p所指向的int的值。(&amp; p)将给出指针的地址,表示*(&amp; p)= p
答案 8 :(得分:1)
我认为您需要取消引用指针以获取值。
尝试打印*p
,因为这会打印存储在地址中的值,这是一个解除引用的指针。
当您打印&p
时,您正在打印p
地址。
打印p
将指针打印到p
。
答案 9 :(得分:1)
在C ++中,许多人更喜欢int* p
而不是int *p
。从语言的角度来看,两者之间完全没有区别,这只是人类感知的问题。
int* p
说:“p
是指向整数”。&p
是p
存储的内存位置(无p
的数据类型。)p
是指针本身。它的值是存储整数的内存位置(p == 0
除外)。*p
是(引用)p指向的值。在C语言中,很多人更喜欢int *p
而不是int* p
。它说:“*p
是一个整数”。这样做的好处是,您不会陷入像int* p, q
这样的陷阱,它会声明int* p
和 int q
。
答案 10 :(得分:0)
对于指针(例如,int * p):
对于非指针(例如,int p):