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

【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !

LuckiBit

目录

  • C语言中指针的大小
    • 1. 指针大小的基本概念
      • 1.1 32位系统
      • 1.2 64位系统
    • 2. 指针大小示例
      • 2.1 32位系统输出
      • 2.2 64位系统输出
    • 3. 指针大小与数据类型无关
      • 示例
      • 输出示例
    • 4. 跨平台的指针大小
      • 示例
      • 输出示例
    • 5. 关键点总结
      • 5.1 指针大小与平台关系
      • 5.2 跨平台编程注意事项
    • 6. 指针大小示例总结
    • 7. 结束语
    • 相关文章:

C语言中指针的大小

在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。通常情况下,所有类型的指针在同一平台上占用的内存大小是相同的。

1. 指针大小的基本概念

1.1 32位系统

在32位系统中,指针大小通常为4字节(32位)。

1.2 64位系统

在64位系统中,指针大小通常为8字节(64位)。

无论指针指向的数据类型是什么,在同一个系统和编译器环境中,所有指针的大小都是一致的。

2. 指针大小示例

我们可以通过编写简单的C程序来查看指针的大小。

#include <stdio.h>int main() {int *p1;char *p2;double *p3;void *p4;printf("Size of int pointer: %zu bytes\n", sizeof(p1));printf("Size of char pointer: %zu bytes\n", sizeof(p2));printf("Size of double pointer: %zu bytes\n", sizeof(p3));printf("Size of void pointer: %zu bytes\n", sizeof(p4));return 0;
}

在不同体系结构下运行该程序,将输出指针的大小。例如:

2.1 32位系统输出

Size of int pointer: 4 bytes
Size of char pointer: 4 bytes
Size of double pointer: 4 bytes
Size of void pointer: 4 bytes

2.2 64位系统输出

Size of int pointer: 8 bytes
Size of char pointer: 8 bytes
Size of double pointer: 8 bytes
Size of void pointer: 8 bytes

3. 指针大小与数据类型无关

指针的大小仅取决于平台和编译器,而与它指向的数据类型无关。这是因为指针只需存储内存地址,而不需要关心地址中存储的数据类型。

示例

#include <stdio.h>int main() {int a = 10;double b = 20.0;int *p1 = &a;double *p2 = &b;printf("Address of a: %p\n", (void*)p1);printf("Address of b: %p\n", (void*)p2);printf("Size of p1: %zu bytes\n", sizeof(p1));printf("Size of p2: %zu bytes\n", sizeof(p2));return 0;
}

无论指针p1指向int类型的变量还是指针p2指向double类型的变量,它们的大小在同一平台上都是相同的。

输出示例

在32位系统上:

Address of a: 0xbffff4c8
Address of b: 0xbffff4cc
Size of p1: 4 bytes
Size of p2: 4 bytes

在64位系统上:

Address of a: 0x7ffee9b7d8f0
Address of b: 0x7ffee9b7d8e8
Size of p1: 8 bytes
Size of p2: 8 bytes

4. 跨平台的指针大小

不同平台的指针大小不同。编写跨平台代码时需要注意这一点,特别是在涉及指针运算和内存分配时。例如,在序列化数据结构时,最好避免依赖特定平台的指针大小。

示例

#include <stdio.h>void print_pointer_size() {printf("Pointer size: %zu bytes\n", sizeof(void*));
}int main() {print_pointer_size();return 0;
}

输出示例

在32位系统上:

Pointer size: 4 bytes

在64位系统上:

Pointer size: 8 bytes

5. 关键点总结

5.1 指针大小与平台关系

  • 指针的大小在同一平台和编译器下是固定的,与指向的数据类型无关。
  • 在32位系统上,指针大小通常为4字节。
  • 在64位系统上,指针大小通常为8字节。

5.2 跨平台编程注意事项

  • 编写跨平台代码时,需要注意指针大小的差异,避免平台依赖问题。
  • 可以通过运行时检查指针大小,以适应不同平台。

通过理解指针大小的这些基本概念,可以更好地编写健壮和可移植的C语言程序。

6. 指针大小示例总结

下面是不同系统上指针大小的总结表:

系统类型指针类型指针大小
32位系统int *4 字节
32位系统char *4 字节
32位系统double *4 字节
32位系统void *4 字节
64位系统int *8 字节
64位系统char *8 字节
64位系统double *8 字节
64位系统void *8 字节

理解这些概念和具体示例,可以帮助开发者在不同平台上更好地使用指针,编写出高效且健壮的C语言代码。

7. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中的指针大小有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!LuckiBit

相关文章:

  • 指针的神秘探险:从入门到精通的奇幻之旅 !

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kubernetes 面试题及答案整理,最新面试题
  • Scrapy框架中,如何有效地管理和维护爬虫的日志记录?
  • 非线性校正算法在红外测温中的应用
  • Java-Swing开发-001组件
  • redis放在三层架构中的哪一层
  • Spark RPC框架详解
  • 计算机三级嵌入式(三)——嵌入式系统硬件组成
  • Matlab 命令行窗口默认输出(异常)
  • 2026考研数学武忠祥课程视频百度网盘资源+PDF讲义(永久更新)
  • CTF-Web习题:[GXYCTF2019]Ping Ping Ping
  • docker镜像
  • 史上最全的Seata教学并且连接springcloudAlibaba进行使用
  • 小红书笔记评论采集全攻略:三种高效方法教你批量导出
  • 网站性能提升
  • 【STM32学习笔记】NVIC中断优先级管理
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Android优雅地处理按钮重复点击
  • css布局,左右固定中间自适应实现
  • js如何打印object对象
  • JWT究竟是什么呢?
  • Puppeteer:浏览器控制器
  • React系列之 Redux 架构模式
  • TypeScript实现数据结构(一)栈,队列,链表
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 强力优化Rancher k8s中国区的使用体验
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 通过npm或yarn自动生成vue组件
  • 详解移动APP与web APP的区别
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Python 之网络式编程
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • $.ajax()
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (day 12)JavaScript学习笔记(数组3)
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二)测试工具
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十五)使用Nexus创建Maven私服
  • (一)80c52学习之旅-起始篇
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)重识new
  • .bat批处理出现中文乱码的情况
  • .Net Memory Profiler的使用举例
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .pyc文件是什么?
  • @reference注解_Dubbo配置参考手册之dubbo:reference