C语言 sizeof深入解析:数组、指针区别与计算

需积分: 10 2 下载量 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` 的使用,有助于优化代码,避免内存溢出等问题。