本篇文章主要围绕着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不会。
如果这篇文章对你有所帮助的话, 不妨点个免费的赞和关注,感谢支持!