sizeof 与 strlen 区别

本文深入解析C/C++中sizeof和strlen的区别与应用。sizeof为编译时期运算符,用于获取类型或变量的字节大小;strlen为运行时函数,专用于计算以null结尾的字符串长度。文章通过实例对比,阐述两者在不同场景下的使用方法。

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

sizeof

sizeof本质是运算符,其值在编译时就计算好了,参数可以是数组、指针、类型、对象、函数等,它的功能是获得保证能容纳实现所建立的最大对象的字节大小。其返回类型为size_t,在头文件中typedef为unsigned int。
具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:

数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,如int*的长度为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

strlen

strlen本质是函数,运行时才能计算。参数必须是字符型指针(char*),当数组名作为参数传入时,看成是指针。

char s[100] = "0123456789";
sizeof(s)结果是100,表示编译器为其分配的数组空间大小。
strlen(s)结果是10,strlen是个函数,内部实现是用一个循环计算到\0为止之前的长度。
char s[] = "0123456789";
sizeof(s)结果为11,因为s是数组,计算到\0位置。
strlen(s)结果为10,原因同上。
char* s = "0123456789";
sizeof(s)结果为4,因为s是指向字符串常量的字符指针,32位机器的指针都占4字节;
sizeof(*s)结果为1,因为*s是第一个字符char型占一个字节;
strlen(s)结果为10,原因同上;
strlen(*s)结果报错,strlen的参数只能是char*,且必须是以‘\0‘结尾的。
int s[100] = "0123456789";
sizeof(s)结果为400,因为每一个元素占4个字节了,所以100*4=400。
strlen(s)结果报错,因为传入的不是char*类型参数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值