C语言 sizeof深入解析:数组、指针区别与计算
需积分: 10 173 浏览量
更新于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 上传
2007-06-20 上传
2023-11-08 上传
点击了解资源详情
2024-05-21 上传
2024-09-21 上传
2023-10-29 上传
2009-05-17 上传
tracyjordan23
- 粉丝: 0
- 资源: 3
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录