C++ - Null Pointers

C++ - Null Pointers

本文关键字:Pointers Null C++      更新时间:2023-10-16

我正在学习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 << "test1n";
char *ptr = 0;
cout << static_cast<void*>(ptr) << "n";
cout << "test2" << "n";;

通常,您可以输出一个指向cout的指针,它将打印包含的地址。但是,当您输出char *时,它被解释为C样式的以null结尾的字符串。在这种情况下,它是一个空指针,不指向字符串。

在输出之前尝试将其强制转换为void *