sizeof 和 strlen 的对比

本篇文章主要围绕着sizeof和strlen展开叙述,主要目标是了解这两个的用法,注意事项,以及辨析两者间的区别。 

1.sizeof

1.1.理解sizeof

sizeof 是一个操作符并且是一个单目操作符,很多人会把 sizeof 当成函数,这显然是不准确的。

sizeof 只关心占用内存空间的大小,不在乎内存中存放什么数据。

 由此可见 sizeof 的大小与内存存放什么数据无关,只在乎存放这数据所消耗的内存。

 1.2.sizeof的用法

sizeof( )        中间填写需要计算的内存空间大小。

中间填写的注意事项: 

  • 可以直接判断类型的内存空间大小 如 int,float,typedef自定义类型等等
  • 可以判断一个变量的内存空间大小 如 上面代码的 a 、b
  • 当判断变量的内存空间大小时,可以省略 "( )"。
  • sizeof 括号中表达式不参与计算。

我们会发现 sizeof() 输出的是 s 内存空间大小,并且 s 并没有进行运算。

为什么sizeof中的表达式不参与运算呢?

因为C语言是编译型语言,一个文件的运行得 编译 ----->链接 -----> test.ext -----> 运行。

而我们正常的表达式是在运行的时候处理的,但是sizeof是在编译的时候处理的,所以在运行的时候无法知道sizeof已处理过数据中的表达式。

2.strlen 

2.1.理解strlen

strlen 是C语言库函数,功能是求字符串的长度。

函数模型为:

size_t strlen( const char* str );

strlen统计的是传入的参数str这个地址开始向后到 '\0' 之前的字符个数。 如下面代码所示:

常量字符串本身就代表首元素的地址,并且末尾自动补 '\0' ,所以用strlen函数判断字符串的长度,返回5(不包含 '\0')。

看下面的另一段代码

可以发现strlen计算字符串长度与\0截止。

2.2.strlen用法

使用 strlen 得引入头文件<string.h>

下面是strlen的三种用法。本质上都是传递一个地址,但是形式可以是指针存储常量字符串,也可以是数组存储字符串,还可以是字符数组。

这里注意第三个用法,字符数组的用法,字符数组最后一定要自己手动添加 ' \0 ' ,因为字符数组和字符串不一样,不会自动在末尾添加 ' \0 ' ,所以我们得自行添加,供strlen判断末尾结束。

3.sizeof 和 strlen 对比  

  • sizeof 是一个操作符;strlen 是一个库函数需包含头文件<string.h>
  • sizeof 计算操作数所占内存的大小,单位是字节;strlen是求字符串长度,统计的是 ' \0 ' 之前的字符个数
  • sizeof不关注内存存放什么数据;strlen关注内存中是否有 ' \0 ' 

这里用一段代码展示两者之前的区别:

sizeof 计算内存大小的时候,会将 ' \0 ' 算上,而strlen不会。

如果这篇文章对你有所帮助的话, 不妨点个免费的赞和关注,感谢支持!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值