在 C中, sizeof 是一个操作符,用于获取数据类型或者变量所占用的内存字节数。
它的使用形式可以是 sizeof(数据类型) 或者 sizeof(变量名) 。
sizeof 的主要作用包括:
1. 帮助程序员了解数据在内存中的存储大小,以便进行有效的内存管理和优化。
2. 在一些与内存操作相关的编程场景中,确保操作的正确性和安全性。
例如, sizeof(int) 可以获取 int 类型所占用的字节数, sizeof(arr) 可以获取数组 arr 所占用的总字节数。
接下来我们看一下sizeof( 内容 )究竟等于什么。
上代码:
从主函数进入,我们知道a是一个数组,
以下是对这段代码输出结果的分析:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[] = { 1,2, 3,4 };
printf("%d\n", sizeof (a)); // 输出 16,因为数组 a 的大小为 4 个整数,每个整数 4 字节,共 16 字节,补充一点,数组名是首元素地址,但是和sizeof搭配使用时,数组名代表整个数组(单独搭配哈),所以求出也是整个数组的大小,这个点不懂得,可以看我的文章中,名叫数组名的理解的文章。
printf("%d\n", sizeof(a + 0)); // 输出 4 或 8,取决于系统是 32 位还是 64 位。a + 0 的类型是指向整数的指针,指针大小通常为 4 字节(32 位系统)或 8 字节(64 位系统)(这里a不是单独在sizeof里面,加了一个0,所以这里的a可不能看成整个a的大小,要看成首元素的地址,地址加0,还是地址)
printf("%d\n", sizeof(*a)); // 输出 4,*a 等价于 a[0],即一个整数的大小,数组名代表首元素地址,首元素地址解引用拿到第一个元素,第一个元素是整型,整型大小4个字节。
printf("%d\n", sizeof(a + 1)); // 输出 4 或 8,与 sizeof(a + 0) 同理
printf("%d\n", sizeof(a[1])); // 输出 4,即一个整数的大小
printf("%d\n", sizeof(&a)); // 输出 4 或 8,&a 是指向整个数组的指针,其大小取决于系统指针大小
printf("%d\n", sizeof(*&a)); // 输出 16,*&a 等价于 a,即数组的大小
printf("%d\n", sizeof(&a + 1)); // 输出 4 或 8,&a + 1 是指向下一个数组的指针,其大小取决于系统指针大小
printf("%d\n", sizeof(&a[0])); // 输出 4 或 8,&a[0] 是指向数组第一个元素的指针,其大小取决于系统指针大小
printf("%d\n", sizeof(&a[0] + 1)); // 输出 4 或 8,&a[0] + 1 是指向数组第二个元素的指针,其大小取决于系统指针大小
return 0;
}