C语言中的sizeof

in 积露为波 with 0 comment

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

Responses