C++——空指针

标签 c++ pointers

<分区>

我正在学习 C++ 中的指针。我写了这个简单的程序来展示我遇到的问题:

#include <iostream>

using namespace std;

int main() {
    cout << "test1";
    char *ptr = 0;
    cout << ptr;
    cout << "test2";
}

当我运行程序时,它最后不输出“test2”,而只输出“test1”。这应该意味着当我试图打印出 ptr 的值时它崩溃了?我尝试在 Eclipse 调试器中单步执行它,看起来每一行都被执行了,但它不会抛出错误或其他什么东西吗?

最佳答案

char *ptr = 0;
cout << ptr;

<< 重载了需要 char* 的运算符操作数,它假定是指向 C 风格字符串的指针。

对于 char* 以外的指针类型, <<运算符将打印指针的值(这是一个地址),但处理空值 char*指针就好像它指向 C 风格的字符串一样会导致未定义的行为。在任何情况下,它都不会打印指针值。

要打印指针值,可以将其转换为void* :

cout << "test1\n";
char *ptr = 0;
cout << static_cast<void*>(ptr) << "\n";
cout << "test2" << "\n";;

关于C++——空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26290624/

相关文章:

c++ - boost 日期时间库的夏令时和其他时区相关问题

c++ - Qt 4.6 - 如何拖放到 QtCreator 中的 QGraphicsView 中?

c++ - 使用英特尔 C++ 编译器 2015 Windows 构建 Boost 1.56

c++ - OpenCV - 具有 filter2D 和双值的 gaussianKernel

chdir(..) 成功返回 0 并更改目录,但输出 "No such file or directory"

c++ - 当我传递纹理坐标 (OpenGL) 时没有任何显示

c++ - 使用 dynamic_cast 转换指针时抛出 bad_cast?

java - Java中的指针类型

performance - x86-64 ISA 的 32 位指针 : why not?

c++ - C++ 中的相互类实例