指针与 nullptr
指针基础、& 和 *、nullptr(C++11)、void* vs typed pointer
指针与 nullptr
C++ 保留了 C 的全部指针能力,同时引入 nullptr(类型安全的空指针)来代替 NULL。
学完本章你将: 掌握指针基础、& 和 *、nullptr 为什么比 NULL 好。
指针基础
cpp
#include <iostream>
int main() {
int x = 42;
int *p = &x; // p 指向 x
std::cout << p << "\n"; // x 的地址
std::cout << *p << "\n"; // 42(解引用)
*p = 100;
std::cout << x << "\n"; // 100
return 0;
}
nullptr —— 类型安全的空指针
cpp
// NULL 的问题
void f(int x) { std::cout << "int\n"; }
void f(void *p) { std::cout << "pointer\n"; }
f(0); // 调用 f(int)——0 是 int
f(NULL); // 调用 f(int) 还是 f(void*)?歧义!
f(nullptr); // 明确调用 f(void*)——nullptr 只能赋给指针
💡 C++11 起,永远用
nullptr而不是NULL或0。nullptr有类型std::nullptr_t,不会与整数混淆。
void* 与 typed pointer
cpp
void *vp = &x; // 可指向任何类型
// *vp = 100; // ❌ 不能解引用 void*
int *ip = static_cast<int *>(vp); // 先转换
*ip = 100; // ✅
// C++ 推荐用模板而不是 void* 做泛型