目录
[一. 指针所占内存空间](#一. 指针所占内存空间)
[1.1 验证指针大小的代码示例](#1.1 验证指针大小的代码示例)
[1.2 不同系统架构下的差异](#1.2 不同系统架构下的差异)
[1.3 指针大小与类型无关](#1.3 指针大小与类型无关)
[1.4 空指针的大小](#1.4 空指针的大小)
[1.5 多级指针的大小](#1.5 多级指针的大小)
[1.6 实际应用中的注意事项](#1.6 实际应用中的注意事项)
一. 指针所占内存空间
指针在内存中占用的空间大小取决于系统架构和编译环境。
32位系统中指针通常占用4字节,
64位系统中通常占用8字节。这种差异源于CPU寻址能力的差异。
1.1 验证指针大小的代码示例
通过sizeof运算符可以验证指针的大小:
cpp
#include <iostream>
using namespace std;
int main() {
int* pInt;
double* pDouble;
char* pChar;
cout << "int指针大小: " << sizeof(pInt) << endl;
cout << "double指针大小: " << sizeof(pDouble) << endl;
cout << "char指针大小: " << sizeof(pChar) << endl;
return 0;
}
1.2 不同系统架构下的差异
在32位Windows系统上运行上述代码,输出通常为4字节。在64位系统上运行,输出通常为8字节。这与系统的寻址空间直接相关:32位系统使用32位地址(4字节),64位系统使用64位地址(8字节)。
1.3 指针大小与类型无关
无论指针指向何种数据类型(int、double、class等),指针本身的大小是固定的。指针变量存储的是内存地址,而地址的长度由系统架构决定,与指向的数据类型无关。
1.4 空指针的大小
空指针(nullptr)也占用相同的空间:
cpp
int* pNull = nullptr;
cout << "空指针大小: " << sizeof(pNull) << endl;
1.5 多级指针的大小
多级指针(如指向指针的指针)同样遵循这个规则:
cpp
int** ppInt;
cout << "二级指针大小: " << sizeof(ppInt) << endl;
1.6 实际应用中的注意事项
开发跨平台应用时需要考虑指针大小的差异。涉及指针运算或内存操作时,明确指针大小可以避免潜在问题。在数据结构设计和内存分配策略中,指针大小会影响整体内存占用。