首先,sizeof是c语言的一种单目操作符,以字节的形式给出了其操作数的存储大小,其返回值为size_t,在64位机器下被定义为long unsigned int。
1.基本数据类型
#include<stdio.h>
#include<cstring>
int main(){
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof(short));//2
printf("%d\n",sizeof(long));//4
printf("%d\n",sizeof(long long));//8
printf("%d\n",sizeof(char));//1
printf("%d\n",sizeof(double));//8
printf("%d\n",sizeof(float));//4
return 0;
}
2.数组
3.字符串
包含了字符串末尾结束符(strlen()函数是求字符串的有效长度,不包含末尾结束符 '\0')
#include<stdio.h>
#include<cstring>
int main(){
int a[10];
printf("%d\n",sizeof(a));//40,int型数组4*10
printf("%d\n",sizeof(&a));//8,指针
char str[]="abcde";
printf("%d\n",sizeof(str));//6
printf("%d\n",strlen(str));//5
char str1[]="abcde\0";
printf("%d\n",sizeof(str1));//7
printf("%d\n",strlen(str1));//5
char b[3][3];
int c[3][3];
printf("%d\n",sizeof(b));//9,3*3的char型矩阵
printf("%d\n",sizeof(c));//36,3*3*4
int d[8];
printf("%d\n",sizeof(d));//32,4*8
return 0;
}
4.指针
在32位机器中,指针的长度为4,在64位机器中指针的长度为8
#include<stdio.h>
#include<cstring>
int main(){
int i=0;
printf("%d\n",sizeof(i));//4
int *p=&i;
printf("%d\n",sizeof(p));//8,由于mac是64位的
int a[10];
printf("%d\n",sizeof(a));//40,int型数组4*10
printf("%d\n",sizeof(&a));//8,指针
return 0;
}
#include<stdio.h>
#include<cstring>
void f1(char a[]){
int len=sizeof(a);
printf("%d\n",len);//8,a是指针
}
int main(){
char str[5]="abcd";
printf("%d\n",sizeof(str));//5
f1(str);//8,传入的参数是一个指针
return 0;
}
几点重要应用
1.求数组元素的个数
int len1 = sizeof(a)/sizeof(char);总长度/单个元素的长度
int len2 = sizeof(b)/sizeof(b[0]);总长度/第一个元素的长度
2.动态内存分配
现在分配足以容纳10个整数的内存,并且我们不知道该特定机器中的sizeof(int)。
int *ptr=malloc(10*sizeof(int));