sizeof细讲

本文详细探讨了C语言中的sizeof关键字,通过实例解释了sizeof对不同变量和数组的计算方式,包括int类型的变量、指向变量的指针、整型数组以及数组的地址。总结了sizeof操作的数据类型和指针、数组名时的不同行为,提供了参考程序和学习资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)= %d\n",sizeof(p));
	printf("sizeof(*p)= %d\n",sizeof(*p));
	int arr[100];
    printf("sizeof(a[100])= %d\n",sizeof(arr[100])); 
    printf("sizeof(a)= %d\n",sizeof(arr)); 
    printf("sizeof(&a)= %d\n",sizeof(&arr)); 
    printf("sizeof(sizeof(&a[0])= %d\n",sizeof(&arr[0])); 
    printf("sizeof(double)= %d,sizeof(double *)=%d",sizeof(double),sizeof(double *));
    return 0;
} 

参考资料《C语言深度分析》,《C和指针》

如有不足之处,请指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值