概述
sizeof是C语言的一个关键字,不是函数,其用于计算被操作对象所占有的内存大小,单位为字节。
我们将以一下的例子来细细讲解sizeof
int a=0;
int *p=&a;
int arr[100];
(1)sizeof(a);
(2)sizeof(p);
(3)sizeof(arr);
(4)sizeof(&arr)
(5)sizeof(&arr[1])
第一种情况,sizeof(a),相当于sizeof(int),,也即是a在内存中占4个字节。
第二种情况,sizeof(p),p是指向a的指针变量,也是说指针变量p保存着变量a在内存的地址,在我这里是64位机,所以,有64/8=8个字节,即sizeof(64位地址)=8,sizeof(32地址)=4
第三种情况特殊一些,arr是一个int类型数组的首地址,但是这里它是对这个数组求大小,所以sizeof(arr)=400;
第四种情况sizeof(&arr),分析得到是对数组第0个元素*(arr+0)的地址求大小,64位机下地址为8位,所以为8
第五种情况sizeof(&arr[1]),与上面类似,是对*(arr+1)的地址求大小,还是8
综上:你不难发现,sizeof操作分类:数据类型和指针(地址),对数据类型操作我们非常熟悉,对指针的操作要小心,看是变量还是数组首地址,对数组名的操作是对于整个数组的求大小。
参考程序:sizeof_test.c
#include<stdio.h>
int main(){
int a=0;
int *p=&a;
printf("sizeof(p)= %dn",sizeof(p));
printf("sizeof(*p)= %dn",sizeof(*p));
int arr[100];
printf("sizeof(a[100])= %dn",sizeof(arr[100]));
printf("sizeof(a)= %dn",sizeof(arr));
printf("sizeof(&a)= %dn",sizeof(&arr));
printf("sizeof(sizeof(&a[0])= %dn",sizeof(&arr[0]));
printf("sizeof(double)= %d,sizeof(double *)=%d",sizeof(double),sizeof(double *));
return 0;
}
参考资料《C语言深度分析》,《C和指针》
如有不足之处,请指出,谢谢!
最后
以上就是沉静夏天为你收集整理的sizeof细讲的全部内容,希望文章能够帮你解决sizeof细讲所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复