指针的大小是多少?
在 C++ 中,指针的大小是固定的,与指向的数据类型无关。具体来说:
🎯 指针大小 = 跟平台(操作系统 + CPU 架构)有关
架构/平台 | 指针大小(字节) | 对应位数 |
---|---|---|
32位系统(x86) | 4 字节(32 位) | 0xFFFFFFFF 范围 |
64位系统(x86_64) | 8 字节(64 位) | 0xFFFFFFFFFFFFFFFF 范围 |
✅ 示例代码:
#include <iostream>int main() {int* p1;double* p2;char* p3;void* p4;std::cout << "sizeof(int*) = " << sizeof(p1) << std::endl;std::cout << "sizeof(double*) = " << sizeof(p2) << std::endl;std::cout << "sizeof(char*) = " << sizeof(p3) << std::endl;std::cout << "sizeof(void*) = " << sizeof(p4) << std::endl;
}
输出(在 64 位平台上)通常是:
sizeof(int*) = 8
sizeof(double*) = 8
sizeof(char*) = 8
sizeof(void*) = 8
🧠 为什么不依赖指向类型?
因为指针本质上就是一个内存地址,和你指向的是 int
、char
还是 double
都没有关系。
- 指针存储的只是地址,例如:
0x7ffd55e1c4a0
- 这个地址的长度由 系统地址总线宽度决定
💡 指针大小不会影响你访问的类型大小
例如:
int* p = new int[100];
p
占用 8 字节(64 位)- 指向的内容:100 个
int
(400 字节)
📌 特别说明:函数指针大小
函数指针也有大小,它通常跟普通指针一样,也是 4 或 8 字节。但在某些架构中可能不同,例如某些嵌入式系统。
✅ 总结
指针大小 ≠ 指向的数据类型大小,而是由系统架构决定的固定大小。
平台 | 指针大小 |
---|---|
32 位系统 | 4 字节 |
64 位系统 | 8 字节 |
你想问的是:int
、double
等基本类型在内存中占多少字节,对吧?下面我来统一回答。
✅ 常见基础类型的内存大小(以常见平台为例)
类型 | 通常大小(字节) | 位数 | 说明 |
---|---|---|---|
char | 1 | 8 | 保证是 1 字节,通常用于字符或字节 |
bool | 1 | 8 | 实现上是 1 字节(虽然只用 1 位) |
short | 2 | 16 | 短整型 |
int | 4 | 32 | 整型(平台相关,但大多数平台是 4 字节) |
long | 8(64位平台)或4 | 64 或 32 | 依赖平台,注意 Windows 下是 4 字节 |
long long | 8 | 64 | 保证是 64 位整型 |
float | 4 | 32 | 单精度浮点数 |
double | 8 | 64 | 双精度浮点数 |
long double | 8/12/16 | 平台相关 | 某些平台支持更高精度 |
🧪 示例代码验证(推荐动手试试)
#include <iostream>
using namespace std;int main() {cout << "sizeof(char) = " << sizeof(char) << endl;cout << "sizeof(bool) = " << sizeof(bool) << endl;cout << "sizeof(short) = " << sizeof(short) << endl;cout << "sizeof(int) = " << sizeof(int) << endl;cout << "sizeof(long) = " << sizeof(long) << endl;cout << "sizeof(long long) = " << sizeof(long long) << endl;cout << "sizeof(float) = " << sizeof(float) << endl;cout << "sizeof(double) = " << sizeof(double) << endl;cout << "sizeof(long double) = " << sizeof(long double) << endl;
}
🔍 在 64 位系统(如 x86_64 Linux)中输出大致为:
sizeof(char) = 1
sizeof(bool) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 16
⚠️ 注意平台差异:
-
在 Windows 下:
long
是 4 字节(不像 Linux 是 8)
-
long double
在不同编译器下可能是 8、12 或 16 字节