sizeof是一个在c语言中经常使用的操作符,它是一个在编译期处理的一元运算符,用来计算计算机分配给操作数的内存大小。sizeof的返回值通常是一个由size_t定义的无符号整型常量(可能是unsigned long long)。它可以应用于基本数据类型(int 、char等)、指针类型以及复合数据类型(structure、union等)
基本用法:
基本数据类型:
当操作数为基本数据类型例如 int, float, char… 等时,sizeof()返回计算机分配操作数的内存大小。
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(float));
printf("%d", sizeof(double));
return 0;
}
复合数据类型:
当操作数为复合数据类型例如 structure, union 等时,sizeof()返回计算机寻址单位(通常是8)的整数倍(方便快速查找数组位置)。
#include<stdio.h>
struct A{
int num;
char ch;
};
int main()
{
printf("%d", sizeof(struct A));
return 0;
}
表达式类型:
当操作数为表达式时,sizeof返回表达式结果的内存大小
#include<stdio.h>
int main()
{
int a=1;
double b=1.0;
printf("%d", sizeof(a+b)); //自动类型转换,结果为8位
sizeof(++a);
printf("%d", a);//a仍为1
return 0;
}
注:sizeof(++a)不会改变x的值.sizeof在编译后会被替换为常数,所以不会影响a的值。不建议这样使用!
应用:
计算数组大小:
#include<stdio.h>
int main()
{
int arr[] = {1, 2, 3, 4, 7, 98, 0, 12, 35, 99, 14};
printf("Number of elements :%d", sizeof(arr)/sizeof(arr[0]));
return 0;
} //Number of elements :11
动态分配内存:
int *ptr = malloc(10*sizeof(int)); //最常用
References
https://www.geeksforgeeks.org/sizeof-operator-c/
https://en.wikipedia.org/wiki/Sizeof
本文由 ukuq 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 13, 2019 at 10:01 pm