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

news2024/11/15 11:19:28

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

相关文章:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PySide(PyQt)的小部件通过伪状态以及自定义特性改变外观

1、通过伪状态来改变外观 伪状态是一种特殊的状态&#xff0c;通常用于描述控件在特定条件下的外观变化。这些状态不是控件的实际属性&#xff0c;而是用于在样式表中应用不同样式的标记。 以QPushButton为例。在 PySide6 中&#xff0c;QPushButton 具有多种伪状态&#xff0c…

卷积神经网络(二)-AlexNet

前言&#xff1a; AlexNet是2012年ImageNet竞赛冠军&#xff08;以领先第二名10%的准确率夺得冠军&#xff09;获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%&#xff08;优于第二名的16.4%&#xff09;,明显优…

科技快讯丨智驱未来,校企共融:浪潮海岳携手山东大学软件学院开展低代码开发实训活动

近日&#xff0c;山东大学软件学院暑期实训活动圆满落幕。作为领先的企业数字化转型优秀服务商&#xff0c;浪潮海岳主导的低代码开发课题吸引了众多师生参训&#xff0c;取得了良好成效。 当前&#xff0c;低代码开发已成为软件行业降本增效、提升用户体验的必然选择&#xff…

labview实现两台电脑共享变量传输及同步

因为工作需要&#xff0c;需要实现多台主机间进行数据传输&#xff0c; 有两个备选方案&#xff0c; 1&#xff1a;建立tcp&#xff0c;然后自己解包 2&#xff1a;就是通过共享变量传输 虽然共享变量也是建立在TCP/IP上面的&#xff0c;但是不用自己解包呀 关于共享变量网络上…

vivo手机恢复出厂设置在哪里?清除数据后如何找回?2个技巧

随着使用时间的增长&#xff0c;手机可能会因为累积的缓存文件、不必要的数据或软件问题而出现性能下降或系统运行缓慢。为了解决这些问题&#xff0c;执行恢复出厂设置成为了一种流行的解决方案。那么&#xff0c;vivo手机恢复出厂设置在哪里&#xff1f;数据清除后该如何找回…

CCRC-DSO数据安全官:打造数据“冷链”,做强做大数据产业

在7月22日国新办举办的“推动高质量发展”系列新闻发布会上&#xff0c;国家数据局局长刘烈宏宣布&#xff0c;为响应党的二十届三中全会的决策&#xff0c;将加速推进数字经济发展机制的构建和完善数据要素市场制度。 他强调了对地方试点探索的支持&#xff0c;目标是建立强大…

基础复习(数组)

数组 一维数组 1.静态初始化 数据类型[] 数组名 new 数据类型[]{元素1,元素2,元素3,...}; 数据类型[] 数组名 {元素1,元素2,元素3...}; 2.动态初始化 数组存储的元素的数据类型[] 数组名字 new 数组存储的元素的数据类型[长度]; 3.执行原理 变量存储的是数组的地址值。…

Pyqt5新手教程

PyQt界面开发的两种方式&#xff1a;可视化UI 编程式UI &#xff08;1&#xff09;可视化UI&#xff1a;基于Qt Designer可视化编辑工具进行组件拖放、属性设置、布局管理等操作创建界面。 一是将其保存为.ui文件&#xff0c;然后在PyQt应用程序中加载和使用.ui文件。 二是使用…

接口自动化测试框架实战-3-文件读写封装

上一小节我们详细介绍了项目中所使用的接口文档&#xff0c;本小节我们将进入到接口测试框架第一个部分通用函数commons的开发&#xff0c;本小节我们重点完成文件读写方法的封装。 首先为什么要封装文件读写的方法&#xff0c;原因有如下几点&#xff1a; 读接口配置&#x…

B站音视频分开 大小问题

音频是33331 kb&#xff0c;视频是374661 kb 合并之后却是2561363 kb 这可能是B站音频和视频分开的原因吧

html实现酷炫美观的可视化大屏(十种风格示例,附源码)

文章目录 完整效果演示1.蓝色流线风的可视化大屏1.1 大屏效果1.2 大屏代码1.3 大屏下载 2.地图模块风的可视化大屏2.1 大屏效果2.2 大屏代码2.3 大屏下载 3.科技轮动风的可视化大屏3.1 大屏效果3.2 大屏代码3.3 大屏下载 4.蓝色海洋风的可视化大屏4.1 大屏效果4.2 大屏代码4.3 …

深入指南:VitePress 如何自定义样式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码&#xff1a; 上报模块Makefile代码&#xff1a; STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

计算机毕业设计-程序论文-高校智能排课系统

本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件都有可私要 项目源码&#xff0c;请关注❥点赞收藏并私信博主&#xf…

UML通信图建模技术及应用例

新书速览|《UML 2.5基础、建模与设计实践》 在对系统的动态行为进行建模时&#xff0c;通信图常被用于按组织结构对控制流进行建模。与顺序图一样&#xff0c;一个单独的通信图只能显示一个控制流。 使用通信图建模时可以遵循如下策略&#xff1a; &#xff08;1&#xff09…

操作系统杂项(九)

目录 一、简述sleep和wait的区别 1、sleep 2、wait 3、区别 二、简述线程池的设计思路&#xff0c;线程池中线程数量的决定因素 1、设计思路 2、线程池中线程数量 三、进程和线程相比&#xff0c;为何更慢 四、简述Linux零拷贝的原理 1、概念 2、优点 3、原理 五、…

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅&#xff0c;继续上篇的DDL、DML、DQL、以及一些约束&#xff0c;该到了多表查询和事务的学习总结&#xff0c;以及相关的案例实现&#xff0c;为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…

加油卡APP系统开发,线上发展优势分析

在当下社会中&#xff0c;汽车加油已经必不可少了&#xff0c;不管有什么出行计划&#xff0c;都需要提前给汽车加油或者中途加油。随着技术的发展&#xff0c;加油卡APP受到了有车一族的欢迎&#xff0c;大众可以在手机上给汽车加油&#xff0c;还能够享受诸多的优惠活动&…

python-阶乘和(赛氪OJ)

题目描述 求Sn​1!2!3!4!5!⋯n!的值&#xff0c;其中 &#x1d45b;n 是一个数字。输入格式&#xff1a; 输入一个整数 n。输出格式&#xff1a; 输出对应的 Sn​。 样例输入输出样例输入 5样例输出 153数据范围 对于 100% 的数据&#xff0c;保证1≤n≤20。来源/分类&#xff…

如何使用Python和Selenium解决reCAPTCHA

CAPTCHA已成为我们日常在线活动中重要的防御线。无论是登录账户、提交表单还是进行在线支付,CAPTCHA都在幕后保护我们的安全。然而,CAPTCHA有时可能会成为自动化的绊脚石,阻碍自动化测试、数据收集和效率提升。那么,如何以合法合理的方式绕过这些复杂的CAPTCHA挑战呢?在本文中…