龙空技术网

嵌入式C语言学习进阶----sizeof运算符,每天进步一点点

嵌入式笔记v 115

前言:

现时姐妹们对“字符串的长度包括结束符吗”都比较珍视,同学们都需要学习一些“字符串的长度包括结束符吗”的相关资讯。那么小编也在网摘上收集了一些有关“字符串的长度包括结束符吗””的相关文章,希望大家能喜欢,咱们一起来学习一下吧!

sizeof是C语言中的一个运算符,特别说明的是sizeof的用法虽很像函数(sizeof()),但其只是个关键字。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>int main(void){	char str[] = "hello";  		printf("sizeof(str) = %d.\n", sizeof(str));					printf("strlen(str) = %d.\n", strlen(str));					return 0;}

运行结果:

sizeof和strlen的区别

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

sizeof测试指针变量大小

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

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

运行结果:

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

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

标签: #字符串的长度包括结束符吗