C++ - Null Pointers
C++ - Null 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 << "test1n";
char *ptr = 0;
cout << static_cast<void*>(ptr) << "n";
cout << "test2" << "n";;
通常,您可以输出一个指向cout的指针,它将打印包含的地址。但是,当您输出char *
时,它被解释为C样式的以null结尾的字符串。在这种情况下,它是一个空指针,不指向字符串。
在输出之前尝试将其强制转换为void *
。
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 为什么要从main()返回NULL?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 使用 curl_easy_cleanup(curl) 时收到未经处理的 NULL 异常
- C++ - Null Pointers