sizeof 函数/关键字
1:sizeof作为关键字的操作
int i,r;
r=sizeof i;//注意,这里sizeof后面没有括号。所以说sizeof有点像关键字
printf("r is %d\n",r);
打印结果:4
2:sizeof作为函数的操作
int p=10;
int r=0;
r=sizeof(int)*p;//sizeof(int) 计算int类型的长度:4(单位字节)
//sizeof(int)*p 等价于 {sizeof(int)} * p,即计算"int长度"和"p的值"的乘积
printf("r is %d\n",r);
打印结果:40
3:sizeof运算:指针,指针指向的值
double *p=NULL;
printf("sizeof(p) is %d\n",sizeof(p));//sizeof的运算对象:p,作为一个指针。
//无论何种类型的指针,其大小均为4字节
printf("sizeof(*p) is %d\n",sizeof(*p)); //sizeof的运算对象:*p,是一个double类型变量。
//长8个字节,所以打印出结果为:8
打印结果:
4
8
4:sizeof运算:数组,数组的元素,的对象
int a[100];
printf("sizeof(a) is %d\n",sizeof(a));//a是数组名,sizeof(数组名)=整个数组的大小
//编译器在处理sizeof(a)的时候,发现a是一个数组,就计算出该数组的长度:4*100
printf("sizeof(&a) is %d\n",sizeof(&a));//&a是指向数组的地址,sizeof (地址),相当于sizeof(一个指针),所以返回:4
printf("sizeof(&a[0]) is %d\n",sizeof(&a[0]));//&a[0]是a数组中第一个元素的地址,sizeof(地址),返回值同上
printf("sizeof(a[100]) is %d\n",sizeof(a[100]));//计算数组a中,第100个元素的大小,int类型长度为 4
打印结果:
400
4
4
4
这里有一点值得注意:
如果用printf打印出来:a,&a,&a[0],它们都是数组a的始址。但是在sizeof运算下,结果却不同
5:补充
void fun(int b[100])
{
printf("sizeof(b) is %d\n",sizeof(b));
}
int main()
{
int a[100];
fun(a); //传参时,传递的是数组的头指针。故打印结果为4,而不是400
}
打印结果:
4