我是靠谱客的博主 沉静夏天,最近开发中收集的这篇文章主要介绍sizeof细讲,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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细讲所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部