C ++指针概念

时间:2013-06-05 10:51:34

标签: c++ pointers

所以,我有我的指针:

int *p = new int(10);

我打印出以下内容:

&p which is: 0xbdee018
 p which is: 0xb8c254b0

&p代表指针的地址,p代表指针本身的映射值的地址。

这是正确的,还是恰恰相反?

11 个答案:

答案 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的地址。如果pint,则可以通过引用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是指向整数”。
  • 的指针
  • &pp存储的内存位置(无p的数据类型。)
  • p是指针本身。它的值是存储整数的内存位置(p == 0除外)。
  • *p是(引用)p指向的值。

在C语言中,很多人更喜欢int *p而不是int* p。它说:“*p是一个整数”。这样做的好处是,您不会陷入像int* p, q这样的陷阱,它会声明int* p int q

答案 10 :(得分:0)

对于指针(例如,int * p):

  • p是指针(即指向对象的地址)
  • &amp; p是指针的地址。
  • * p是指向对象(解除引用)。

对于非指针(例如,int p):

  • p是数据
  • &amp; p是其地址