C语言 sizeof深入解析:数组、指针区别与计算
需积分: 10 199 浏览量
更新于2024-10-17
收藏 66KB DOC 举报
在C语言中,`sizeof` 是一个非常重要的运算符,它用于计算数据类型的大小,以字节为单位。本篇文章主要讲解了`sizeof` 在处理数组、指针等不同类型数据结构时的用法。
首先,我们来看一下 `sizeof` 在处理数组时的应用。在程序中,`char as[10];` 定义了一个包含10个字符的数组 `as`,`sizeof(as)` 返回的结果是10,因为它占用了10个字符的空间,每个字符占1个字节。同样,`char as2[10][20];` 是一个二维字符数组,`as2[0]` 表示第一行的数组,`sizeof(as2[0])` 返回的是20,因为每行有20个字符。
对于多维数组,`sizeof(as2)` 返回的是整个数组的总大小,即10行乘以每行20个字符的大小,即200字节。这说明 `sizeof` 可以计算出数组的存储空间,而不仅仅是单个元素。
接下来,`char *ps = as;` 将 `as` 数组的首地址赋值给指针 `ps`,`sizeof(ps)` 返回的是指针的大小,通常为4字节,这取决于编译器和系统,但不是数组本身所占的内存。
对于数组指针,如 `char *pa[10];` 定义了一个包含10个 `char` 指针的数组,`sizeof(pa)` 返回的是所有指针占用的内存,即10个4字节的指针共40字节。而 `sizeof(*pa)` 则表示单个指针所指向的数据类型大小,即4字节。
`char (*ppa)[10];` 定义了一个指向字符数组的指针 `ppa`,`sizeof(ppa)` 返回的是指针本身的大小,同样为4字节。然而,`sizeof(*ppa)` 计算的是 `ppa` 指向的数组(即10个字符)的大小,也就是40字节。
当涉及到字符串常量时,如 `char *pc = "hello";` 和 `char pac[] = "hello";`,`sizeof(pc)` 返回的是指针的大小,通常也是4字节,而 `sizeof(*pc)` 或 `sizeof(pac)` 则分别计算字符串 "hello" 占用的字节数,因为字符串是以 '\0' 结尾的,所以 "hello" 占6个字节,加上自动添加的结束符,总共7个字节,但这里 `sizeof` 返回的是实际的字节数,即6字节。
`sizeof` 运算符是理解C语言中数据类型内存占用情况的重要工具,它不仅能计算数组元素的大小,还能揭示指针和数组指针的区别,以及不同类型数据结构的内存布局。熟练掌握`sizeof` 的使用,有助于优化代码,避免内存溢出等问题。
2022-11-03 上传
2022-11-03 上传
2009-05-17 上传
2024-05-21 上传
2023-08-18 上传
2024-09-21 上传
2024-05-15 上传
2023-03-24 上传
2023-12-09 上传
tracyjordan23
- 粉丝: 0
- 资源: 3
最新资源
- 磁性吸附笔筒设计创新,行业文档精选
- Java Swing实现的俄罗斯方块游戏代码分享
- 骨折生长的二维与三维模型比较分析
- 水彩花卉与羽毛无缝背景矢量素材
- 设计一种高效的袋料分离装置
- 探索4.20图包.zip的奥秘
- RabbitMQ 3.7.x延时消息交换插件安装与操作指南
- 解决NLTK下载停用词失败的问题
- 多系统平台的并行处理技术研究
- Jekyll项目实战:网页设计作业的入门练习
- discord.js v13按钮分页包实现教程与应用
- SpringBoot与Uniapp结合开发短视频APP实战教程
- Tensorflow学习笔记深度解析:人工智能实践指南
- 无服务器部署管理器:防止错误部署AWS帐户
- 医疗图标矢量素材合集:扁平风格16图标(PNG/EPS/PSD)
- 人工智能基础课程汇报PPT模板下载