C语言 sizeof深入解析:数组、指针区别与计算
需积分: 10 145 浏览量
更新于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` 的使用,有助于优化代码,避免内存溢出等问题。
107 浏览量
236 浏览量
149 浏览量
289 浏览量
点击了解资源详情
2024-11-14 上传
137 浏览量
120 浏览量
2023-10-29 上传
tracyjordan23
- 粉丝: 0
- 资源: 3
最新资源
- 导入和读取 Excel 文件:使用 ActiveX 将 Excel 数据导入工作区的自定义且灵活的功能。-matlab开发
- bguerel:本努尔·古雷尔
- cachlamhay
- devopstools.guthub.io
- makehuman-0.8_beta_src.tar.gz
- 新浪微博小助手 龙网新浪微博小助手 v9.7
- intro-to-java-workshop-Jayh80961:GitHub教室创建的java-workshop-Jayh80961简介
- 行业分类-设备装置-一种承坐式万向运动平台.zip
- tensorscript:移至https
- CV
- 协程:学校Opdracht
- 基于神经网络的图像分类和bp算法 matlab实现 图像分类.zip
- bw-ssh-docs:Bitwarden SSH管理器文档
- 行业分类-设备装置-一种接地电容的RC常数测量方法.zip
- lin_interp(T, var_name, TBDx):内插表值-matlab开发
- 强制粘帖0.2.zip