c语言 sizeof_C语言学习篇(14)-----sizeof运算符

sizeof是C语言中的一个运算符,特别说明的是sizeof的用法虽很像函数(sizeof()),但其只是个关键字。sizeof的作用是用来返回括号中()里卖弄的变量或者数据类型占用的内存字节数。

928a40b9c5a516c2357d57554f947371.png

sizeof运算符相关介绍

sizeof的价值

主要是因为在不同平台下各种数据类型所占的内存字节数可能存在差异(譬如在32系统中为4个字节,在16为系统中为2字节)。所以程序中需要使用sizeof来判断变量和某个数据类型在当前环节下占几个字节。

同时可以使用sizeof编写代码可以适配各个平台环境,感受下以下代码有何不同?

假如我们在编写代码中,想申请100个int类型的数据大小内存空间(以32位系统为例)

//写法一:int *p = malloc(4*100);//写法二:int *p1 = malloc(sizeof(int) * 100);

显然第一种写法在移植到其他平台上,就需要修改程序,而第二种完美适配。养成良好的编程习惯,提升编程能力,正是需要抓住这些细节。

以下也是一个sizeof典型的智能用法:

sizeof和strlen的区别

#include int main(void){char str[] = "hello";  printf("sizeof(str) = %d.", sizeof(str));printf("strlen(str) = %d.", strlen(str));return 0;}

运行结果:

1dd9080998618d1141e26952fbe34548.png

sizeof和strlen的区别

从程序运行结果可知,sizeof计算str字符串长度时,会将编译器自动添加的字符串结束符('0')也计算进去,因此 'h', 'e', 'l', 'l' , 'o', '0', 总长度为6。而strlen则直接计算字符串实际有效长度,即计算长度不包含结束符'0', 因此结果为5。

sizeof测试指针变量大小

测试指针变量占用字节数(我的测试环境是64位的Ubuntu)

#include int main(void){char str[] = "hello";  char *p = str;short *p1;  int *p2;  long int *p3;printf("sizeof(p) = %d.", sizeof(p));//计算char *指针变量printf("sizeof(p1) = %d.", sizeof(p1));//计算short *指针变量printf("sizeof(p2) = %d.", sizeof(p2));//计算int *指针变量printf("sizeof(p3) = %d.", sizeof(p3));//计算long *指针变量return 0;}

运行结果:

981bc0635c8ba044bf5e918993d2488f.png

用sizeof测试不同类型指针变量

可以看到,不管何种类型的指针变量,所占用的字节都是8个(64位系统,如果是32位系统,则结果为4), 因此我们可以得到指针变量,所占的字节数是跟系统位数相关的,与何种类型无关(如char *, int *, float *等等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值