将指针值分配给另一个指针值。我做错了吗?
Posted
技术标签:
【中文标题】将指针值分配给另一个指针值。我做错了吗?【英文标题】:Assigning pointer value to another pointer value. Am I doing this wrong? 【发布时间】:2016-01-29 13:18:57 【问题描述】:我正在尝试将动态数组的地址分配给另一个动态数组,即我拥有的两个指针的地址:
Someclass *pointer = new Someclass[10];
Someclass *pointer2 = new Someclass[10];
我现在想将指针的地址分配给指针2:
pointer2 = pointer;
测试地址是否相同:
cout << &pointer2 << endl;
cout << &pointer << endl;
我的输出:
0x28fed4
0x28fb98
所以他们的地址不一样。是什么赋予了?我不是通过键入pointer2 = pointer 将它们分配给相同的地址吗?如果不是,那么这个语句是做什么的?
我尝试用一个没有类和对象的更简单的程序来做到这一点:
int main()
int * pointer1;
int * pointer2;
pointer1 = pointer2;
cout << &pointer1 << endl;
cout << &pointer2 << endl;
同样的,他们的地址还是不同的?这可能是我误解的基本内容,有人可以清除它吗?谢谢。
【问题讨论】:
它们是不同的对象,所以它们的地址不同。顺便说一句,您有内存泄漏。 尝试打印没有&
。 P.S 你的头像图片规则!!!
如果您使用int i=0; int j=1; i = j
,您是否希望&i
和&j
变得相同?
【参考方案1】:
你打印的是指针的地址,而不是指针指向的地址!
试试这个:
cout << pointer2 << endl;
cout << pointer << endl;
当您使用&
时,您会使用 地址 某物,因此 &pointer
是指针的 地址,而不是它指向的东西。是的,即使是指针也可以有指向它们的指针!
【讨论】:
哇,非常感谢你,我只是感到困惑。抱歉问了这么愚蠢的问题! 明确一点...指针有一个地址,就像任何变量一样,它也指向另一个地址,那个地址就是指针的值?是对的吗?所以基本上一个指针可以有两个地址,一个是存储指针本身的地址,一个是指针指向的地址(除非它是一个 NULL 指针)? 是的,但认为它“有两个地址”会令人困惑。与任何变量一样,指针具有一个地址。和其他变量一样,它也有一个值。对于整数,值是一个数字,但对于指针,它是一个地址。但它没有两个地址。它有一个地址,并且有一个值(即一个地址)。 谢谢。我意识到像“它有两个地址”这样的措辞令人困惑,因为它有一个地址,就像它位于内存中的所有变量一样,但它的特别之处在于它的值是你分配给它的另一个地址或 0 以防万一空指针。但这是否意味着指针可以将自身的地址作为其值?有可能吗? @OfeliavanAnalhard 指针通常不能保存自己的地址,因为类型系统赋予它不同的类型(指向类型指针的指针)。但是您可以通过铸造将其楔入。void*
是一个例外,它可以指向它自己。以上是关于将指针值分配给另一个指针值。我做错了吗?的主要内容,如果未能解决你的问题,请参考以下文章