【问题标题】:Pointer address and address of variables to which pointer points [duplicate]指针地址和指针指向的变量的地址[重复]
【发布时间】:2020-12-30 15:11:35
【问题描述】:

我是 C++ 的新手,我的问题可能看起来很基础,但您的回答可以帮助我并帮助其他人。

我创建了 char 指针 myPointer1 和 myPointer2 所以

const char *myPointer1 = "Hallo";
const char* myPointer2 = myPointer;

我认为指针存储了它们指向的变量的地址。在这种情况下,我们只有一个变量“Hallo”,然后两个指针都应该指向同一个地址。 但是当我打印时:

cout << &myPointer1 << endl << endl;
cout << &myPointer2 << endl << endl;

结果是两个不同的地址:

009EFC00
009EFBE8

有人可以帮忙吗?

【问题讨论】:

  • 您的意思是写:const char* myPointer2 = myPointer1;myPointer3 是什么@您的演示代码中似乎缺少一些部分。
  • ... 或者可能是拼写错误。请澄清。
  • @πάνταῥεῖ 你是对的,对不起,我的意思是 const char* myPointer2 = myPointer1;
  • myPointer1myPointer2 是不同的变量,所以它们有不同的地址 - 尝试cout &lt;&lt; (&amp;myPointer1 == &amp;myPointer2); 来验证。它们都具有相同的值 - 尝试cout &lt;&lt; (myPointer1 == myPointer2); 进行验证。

标签: c++ pointers char-pointer


【解决方案1】:

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

std::cout << myPointer << std::endl;

这将打印指针指向的地址。

由于char* 在传递给std::cout 时被视为字符串,因此它将打印Hallo

如果您想打印地址本身,您可以通过将其转换为 const void* 并打印它来实现。

#include <iostream>

int main() {
  const char *myPointer1 = "Hallo";
  const char* myPointer2 = myPointer1;

  std::cout << static_cast<const void*>(myPointer1) << std::endl;
  std::cout << static_cast<const void*>(myPointer2) << std::endl;
}

【讨论】:

  • 你写的内容打印的是变量的内容(这里是“Hallo”)而不是指针的地址
  • @Hormesis 是的。 std::cout 有一个重载,它接受 char* 并将其打印为字符串。打印两个指针都会打印“Hallo”,表明它们指向同一个东西。
  • @Hormesis the content of the variable (here "Hallo") 不,myPointer 的内容不是“你好”。它是一个匿名const char[] 数组的地址,其中包含"Hallo"
  • @Hormesis 因为myPointer1myPointer2 也是独立的变量,有自己的地址。你可以有一个const char**,一个指向char的指针。 const char** myPointerToPointer = &amp;myPointer1; 例如。指针有一个值,它指向的地址。但它也是一个有自己地址的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多