当前位置: 首页 > news >正文

指针的大小是多少?

在 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

🧠 为什么不依赖指向类型?

因为指针本质上就是一个内存地址,和你指向的是 intchar 还是 double 都没有关系。

  • 指针存储的只是地址,例如:0x7ffd55e1c4a0
  • 这个地址的长度由 系统地址总线宽度决定

💡 指针大小不会影响你访问的类型大小

例如:

int* p = new int[100];
  • p 占用 8 字节(64 位)
  • 指向的内容:100 个 int(400 字节)

📌 特别说明:函数指针大小

函数指针也有大小,它通常跟普通指针一样,也是 4 或 8 字节。但在某些架构中可能不同,例如某些嵌入式系统。


✅ 总结

指针大小 ≠ 指向的数据类型大小,而是由系统架构决定的固定大小

平台指针大小
32 位系统4 字节
64 位系统8 字节

你想问的是:intdouble基本类型在内存中占多少字节,对吧?下面我来统一回答。


✅ 常见基础类型的内存大小(以常见平台为例)

类型通常大小(字节)位数说明
char18保证是 1 字节,通常用于字符或字节
bool18实现上是 1 字节(虽然只用 1 位)
short216短整型
int432整型(平台相关,但大多数平台是 4 字节)
long8(64位平台)或464 或 32依赖平台,注意 Windows 下是 4 字节
long long864保证是 64 位整型
float432单精度浮点数
double864双精度浮点数
long double8/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 字节


http://www.lryc.cn/news/597702.html

相关文章:

  • 电子公章怎么弄到合同上?2025最新指南
  • 负压产生电路分析
  • 【AI News | 20250722】每日AI进展
  • 借助DataStream和多路复用实现可观察性
  • 如何用 Kafka + Redis + 线程池搭建高吞吐异步消息处理架构
  • 解决 i.MX6ULL 通过 ADB 连接时权限不足问题 not in the plugdev group
  • C 语言介绍
  • 环境搭建①:下载STM32标准外设库(固件库下载)
  • J2EE模式---视图助手模式
  • Tomcat项目部署(单体、聚合项目)
  • LLM中词嵌入向量的 模长 和 角度 的物理含义
  • 【JavaScript】window.location用法
  • 【Vue3】ECharts图表案例
  • ArcGIS Pro从0开始制作中国主图及黄土高原地势区域图
  • PPO:强化学习中的近端策略优化——原理、演进与大规模应用实践
  • 【STM32】FreeRTOS的移植(一)(详细流程)
  • split() 函数在 Java、JavaScript 和 Python 区别
  • 电子设计大赛【摄像头循迹】讲解
  • 第1章第2章笔记
  • 力扣-贪心/动归dp-持续更新中。。。。。。
  • 白盒测试核心覆盖率标准详解文档
  • 【Windows命令手册】Windows中的常用命令,并与 Linux 做比较
  • micro avg、macro avg 和 weighted avg 的区别
  • Oracle19c HINT不生效?
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十一课——车牌识别的FPGA实现(3)车牌字符分割预处理
  • java设计模式 -【策略模式】
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十二课——车牌识别的FPGA实现(4)车牌字符的分割定位
  • Android组件化实现方案深度分析
  • 向华为学习——学习华为政务数据安全建设指南【附全文阅读】
  • 【机器学习深度学习】生成式模型的评估与验证