
⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///
WARNING : DETECTING HIGH ENERGY
🌊 🌉 🌊 心手合一 · 水到渠成

|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
| >>> ACCESS TERMINAL <<< ||
| 🦾 作者主页 | 🔥 C语言核心 |
| 💾 编程百度 | 📡 代码仓库 |
Running Process: 100% | Latency: 0ms
索引与导读
- [💻NULL 的局限性](#💻NULL 的局限性)
- C++11引入的nullptr
- 代码示例
- [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)
💻NULL 的局限性
NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:
c
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
#ifndef NULL
如果当前环境中还没有定义过 NULL
#ifdef __cplusplus
编译器在处理代码时,如果是C++环境,会自动定义__cplusplus这个宏
代码通过它来决定采用哪种定义方式:
-
在
C++中 (#define NULL 0): 在C++里,指针的类型检查非常严格。在早期的C++标准中,void*类型不能像在C语言中那样隐式转换为其他类型的指针。因此,将NULL直接定义为整数 0是最兼容的做法,C++编译器会自动将字面量0视为空指针。 -
在 C 语言中
(#else -> #define NULL ((void *)0)): C 语言允许void*隐式转换为任意类型的指针。将NULL定义为((void *)0)(即将地址0强制转换为无类型指针)更加直观且具备类型安全性,能够明确告诉编译器这是一个"指针"而非"整数"

C++11引入的nullptr
nullptr是一个特殊的关键字nullptr是一种特殊类型的字面量 ,它可以转换成任意其他类型的指针类型- 使用
nullptr定义空指针 可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型
代码示例
cpp
#include <iostream>
using namespace std;
void f(int x) {
cout << "f(int x)" << endl;
}
void f(int* ptr) {
cout << "f(int* ptr)" << endl;
}
int main() {
f(0); // 调用 f(int x)
// 本想通过 f(NULL) 调用指针版本的 f(int*) 函数,
// 但是由于 NULL 被定义成 0,调用了 f(int x),因此与程序的初衷相悖。
f(NULL); // 可能调用 f(int x)(如果 NULL 被定义为 0)
f((int*)NULL); // 强制转换为 int*,调用 f(int* ptr)
// 编译报错:error C2665: "f": 2 个重载中没有一个可以转换所有参数类型
// f((void*)NULL); // 无法隐式转换为 int*(C++ 不允许从 void* 到 int* 的隐式转换)
f(nullptr); // 正确调用 f(int* ptr),nullptr 可隐式转换为任意指针类型
return 0;
}
❗❗❗❗❗❗ f((void*)NULL) 在C++中编译错误,因为void*不能隐式转换为 int*(C 语言允许,C++ 不允许)
💻结尾--- 核心连接协议
警告: 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠
【📡】 建立深度链接: 关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。
【⚡】 能量过载分发: 执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。
【💾】 离线缓存核心: 将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。
【💬】 协议加密解密: 在评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。
【🛰️】 信号频率投票: 通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。

