如何将指针指向字符

How to point a pointer to a character

本文关键字:字符 指针      更新时间:2023-10-16

所以我想将指针指向一个字符,然后输出地址,让它输出这个奇怪的东西:t+ a。

#include <iostream>
using namespace std;
int main() {
char a = 't';
char* p = &a;
cout << p;
return 0;
}

您正在打印一个char*类型,cout尝试将其解释为字符串。

使用以下方法打印指针的值(指针指向的地址):

cout << (void *)p;
-- OR --
cout << static_cast<void *>(p);

问题是char *通常不仅用作指向char的指针,而是指向以 null 结尾的 C 字符串的指针。 然后cout将打印p指向的所有字符,直到找到'',因此您可以看到t,然后它打印无效内存,这是未定义的行为,可能会崩溃或打印垃圾或其他内容。

解决此问题的方法是使用 void *const void * 代替,它只是一个带有地址但没有附加类型信息的指针。 void *p = &a;将是一个解决方案。 void *p2 = p;然后使用std::cout << p2;将是另一回事。您也可以使用其他答案中所示的强制转换,除了您应该使用像static_cast<const void*>(p)这样的C++转换而不是像(void *)p这样的 C 转换,因为一旦你习惯了它们,它们就会变得更容易阅读和推理。

如果你想要指针的地址,要么把它投射到void指针

std::cout << (void *)p;

或将printf与 %p 选项一起使用

printf("%p", p);

否则,它将被视为以 null 结尾的字符串,而事实并非如此。