如何将指针指向字符
How to point a pointer to a character
所以我想将指针指向一个字符,然后输出地址,让它输出这个奇怪的东西: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 结尾的字符串,而事实并非如此。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 字符指针的 Qt 数组
- C++将常量字符* 指针数组传递给对象
- 为什么不能将字符指针定义为数组?
- 在函数内初始化无符号字符指针将返回空指针
- 将字符指针存储到容器中
- 为什么 strtok_r() 只接受字符数组而不接受字符指针
- 字符指针数组内存分配
- 字符指针不递增?
- 如何在C++中使用字符指针
- 确保字符指针始终指向相同的字符串文字
- C++中的字符指针
- 使用unique_ptr的常量字符指针
- 字符指针不断意外更改
- 将字符指针中的十六进制转换为十进制
- 如何将字符*(字符指针)转换为 PCSZ?
- 在向量中存储字符指针
- 字符指针具有不同的值