Sizeof是C语言中的一个运算符,特别是sizeof的用法虽然和function (sizeof())很像,但它只是一个关键字。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 < stdio . h & gt; int main(void) { char str[]= & # 34;你好& # 34;; printf(& # 34;sizeof(str)= % d . n & # 34;,sizeof(str)); printf(& # 34;strlen(str)= % d . n & # 34;,strlen(str)); 返回0; }操作结果:
sizeof和strlen的区别
根据程序运行结果,sizeof在计算str字符串长度时,会自动添加字符串终止符(& # 39;0')也算,所以& # 39;h & # 39, 'e & # 39, 'l & # 39, 'l & # 39, 'o & # 39, '0',总长6。而strlen则直接计算字符串的实际有效长度,即计算出的长度不包含终止符& # 39;0',所以结果是5。
sizeof测试指针变量大小测试指针变量占用的字节数(我的测试环境是64位Ubuntu)
# include & ltstdio.h & gt int main(void) { char str[]= & # 34;你好& # 34;; char * p = str; short * P1; int * p2; long int * P3; printf(& # 34;sizeof(p)= % d . n & # 34;sizeof(p));//Calculate char *指针变量 printf(& # 34;sizeof(P1)= % d . n & # 34;sizeof(P1));//计算短*指针变量 printf(& # 34;sizeof(p2)= % d . n & # 34;sizeof(p2));//计算int *指针变量 printf(& # 34;sizeof(P3)= % d . n & # 34;sizeof(P3));//计算long *指针变量 返回0; }操作结果:
用sizeof测试不同类型的指针变量
可以看出,无论什么类型的指针变量,占用的字节都是8 (64位系统,如果是32位系统,结果是4),所以我们可以得到指针变量,占用的字节数与系统位数有关,与类型无关(如char *、int *、float *等)。
最新评论