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

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;

同样的,他们的地址还是不同的?这可能是我误解的基本内容,有人可以清除它吗?谢谢。

【问题讨论】:

它们是不同的对象,所以它们的地址不同。顺便说一句,您有内存泄漏。 尝试打印没有&amp;。 P.S 你的头像图片规则!!! 如果您使用int i=0; int j=1; i = j,您是否希望&amp;i&amp;j 变得相同? 【参考方案1】:

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

试试这个:

cout << pointer2 << endl;
cout << pointer << endl;

当您使用&amp; 时,您会使用 地址 某物,因此 &amp;pointer 是指针的 地址,而不是它指向的东西。是的,即使是指针也可以有指向它们的指针!

【讨论】:

哇,非常感谢你,我只是感到困惑。抱歉问了这么愚蠢的问题! 明确一点...指针有一个地址,就像任何变量一样,它也指向另一个地址,那个地址就是指针的值?是对的吗?所以基本上一个指针可以有两个地址,一个是存储指针本身的地址,一个是指针指向的地址(除非它是一个 NULL 指针)? 是的,但认为它“有两个地址”会令人困惑。与任何变量一样,指针具有一个地址。和其他变量一样,它也有一个值。对于整数,值是一个数字,但对于指针,它是一个地址。但它没有两个地址。它有一个地址,并且有一个值(即一个地址)。 谢谢。我意识到像“它有两个地址”这样的措辞令人困惑,因为它有一个地址,就像它位于内存中的所有变量一样,但它的特别之处在于它的值是你分配给它的另一个地址或 0 以防万一空指针。但这是否意味着指针可以将自身的地址作为其值?有可能吗? @OfeliavanAnalhard 指针通常不能保存自己的地址,因为类型系统赋予它不同的类型(指向类型指针的指针)。但是您可以通过铸造将其楔入。 void* 是一个例外,它可以指向它自己。

以上是关于将指针值分配给另一个指针值。我做错了吗?的主要内容,如果未能解决你的问题,请参考以下文章

Cray 指针和数组的分段错误:我做错了啥?

链接列表练习,我做错了什么?

为啥没有给另一个进程访问内存位置的权限?

为什么@Autowired不起作用,返回空指针值

将结构成员指针分配给另一个动态内存分配的指针是不是安全?

将 unordered_maps 作为指针访问