将指针值分配给另一个指针值.我做错了吗?

use*_*939 1 c++ pointers

我试图将动态数组的地址分配给另一个动态数组,即我有两个指针的地址:

 Someclass *pointer = new Someclass[10];

 Someclass *pointer2 = new Someclass[10];
Run Code Online (Sandbox Code Playgroud)

我现在想要将指针的地址分配给pointer2:

 pointer2 = pointer;
Run Code Online (Sandbox Code Playgroud)

测试以查看地址是否相同:

 cout << &pointer2 << endl;
 cout << &pointer << endl;
Run Code Online (Sandbox Code Playgroud)

我的输出:

 0x28fed4
 0x28fb98
Run Code Online (Sandbox Code Playgroud)

所以他们的地址不一样.是什么赋予了?我不是只是通过输入pointer2 = pointer将它们分配到同一个地址吗?如果没有,那么这个陈述是做什么的?

我试着用一个没有类和对象的简单程序来做这件事:

 int main()
 {
int * pointer1;
int * pointer2;

pointer1 = pointer2;

cout << &pointer1 << endl;
cout << &pointer2 << endl;
}
Run Code Online (Sandbox Code Playgroud)

它是一样的,他们的地址仍然不同?这可能是我误解的基本内容,有人可以清理它吗?谢谢.

Gal*_*lik 5

您打印出的地址指针,而不是指针指向的地址!

试试这个:

cout << pointer2 << endl;
cout << pointer << endl;
Run Code Online (Sandbox Code Playgroud)

当你使用&你把地址东西,所以&pointer的地址指针,而不是它所指向的东西.是的,即使是指针也可以指向它们!

  • 是的,但认为它"有两个地址"令人困惑.指针,就像任何变量都有一个地址一样.和其他变量一样,它有一个值.对于整数,该值是一个数字,但对于指针,它是一个地址.但它没有两个地址.它有一个地址,它有一个值(这是一个地址). (3认同)
  • @OfeliavanAnalhard指针通常不能保存自己的地址,因为类型系统给它一个不同的类型(*指向类型*的指针).但你可以用铸造来楔入它.`void*`是一个例外,可以指向自己. (2认同)