所以,我有我的指针:
int *p = new int(10);
我打印出以下内容:
&p which is: 0xbdee018
p which is: 0xb8c254b0
&p
代表指针的地址,p
is代表指针本身映射的值的地址。
这是正确的,还是恰恰相反?
对,就是这样。&
给出元素的地址。
所以
p
给出当前在变量中的值 -p
作为一个指针,你得到一个指针(指向一个 int)&p
返回地址p
以图形方式
p value = 0xb8c254b0 --> int x 10
^
|-------- 0xbdee018
是的你是对的 。
&p
代表指针的地址并p
给出它指向的地址。
p
表示整数的地址,例如int*
.
*p
表示存储在p
(取消引用)的整数,例如int
.
&p
表示指针的地址p
。如果p
是int
,您将通过引用来获得指向 int 的指针p
,例如int*
。
是的,你完全正确。
&p 是指针的地址,或者您可以说指针的指针。
p 是 10 个 int 元素的数组的指针。
我认为你正在以正确的方式得到东西。指针必须存储在某个地方,因此它也有一个地址。尝试使用调试器查看内存,使用示例中显示的地址,指向该地址
0xbdee018
并检查字节,你应该会看到,以一些字节顺序:
0xb8c254b0
即p
。
字节的顺序取决于您使用的 CPU 的“字节顺序”
指针是一个variable
存储address of other variable
指针指向的对象。这个变量本身也有内存地址,&p
在这种情况下,如果变量名是p
. 所以:
“&p”代表指针的地址,“p”代表指针本身映射的值的地址。
你说的对。此外,*p
将为您提供它指向的对象的值。您可能会发现Binky Pointer Fun Video很有用。
是的,看来,你做对了。
说明:
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>
即检索存储在该指针指向的位置的实际数据。P 是指向 int 的指针。(*p) 表示指针 p 处的值,它将是 p 指向的 int 的值。(&p) 将为您提供指针的地址,表示 *(&p)=p。
我认为您需要取消引用指针才能获得该值。
尝试打印*p
,因为这会打印存储在地址中的值,这是一个取消引用的指针。
当您打印时&p
,您正在打印地址的地址p
。
打印p
将指针打印到p
。
在 C++ 中,许多人更int* p
喜欢int *p
. 从语言的角度来看,两者之间绝对没有区别,这只是人类感知的问题。
int* p
说:“p
是一个指向整数的指针”。&p
是存储的内存位置p
(与 的数据类型无关p
)。p
是指针本身。它的值是一个存储整数的内存位置(if 除外p == 0
)。*p
是(对)p 指向的值的引用。在 C 中,许多人更int *p
喜欢int* p
. 它说:“*p
是一个整数”。这样做的好处是您不会陷入诸如int* p, q
声明 anint* p
和 an之类的陷阱int q
。
对于指针(例如,int* p):
对于非指针(例如,int p):