1 介绍
sizeof 是C语言关键字不是函数,而strlen是函数。
下面代码测试了sizeof,证明sizeof不是函数:
通过上图可以看见,sizeof(ans)和 sizeof ans都没有报错,可以联想函数,函数名后面没有括号是不行的,因为函数名后的()是函数调用操作符,所以可以证明sizeof不是函数。
sizeof在计算变量所占空间大小时,括号可以省略,而计算类型大小时不能省略
strlen函数原型:
size_t strlen ( const char * str );
其中size_t其实是无符号整型,原型为:
typedef unsigned int size_t;
2 比较sizeof和strlen
2.1 sizeof
2.1.1 sizeof测类型字节数
分析:在32位系统,测出上述的结果。由结果可以知道double在32位系统下,有8个字节。
2.1.2 sizeof测字符串长度
分析:sizeof测字符串长度时,计算的是包含字符串结束标志\0的长度,所以上图所示,字符串长位5个字节(5*(char的字节大小))。
2.1.3 sizeof测数组字节数和长度
总结分析:
sizeof可以用来测类型的大小。
sizeof可以用来字符串的长度,但是sizeof会计算字符串的结束标志位\0。
sizeof可以用来计算整型数组的长度。
2.2 strlen测字符串
用strlen测字符串长度时,不计算字符串结束标志\0的长度。
3 总结
- sizeof的不是函数。
- sizeof可以测整型,数组等的长度。
- sizeof后括号中单独加数组名表示的是 整个数组的字节大小。
- sizeof还可以用来测试指针类型大小,即地址大小。
strlen在测字符串长度时,比sizeof少了一个结束标志\0。
一个公式送给大家:
∫
t
o
d
a
y
∞
(
L
e
a
r
n
+
S
u
m
m
a
r
y
+
C
o
d
i
n
g
)
=
S
u
c
c
e
s
s
\int _{today}^{\infty} (Learn+Summary+Coding)=Success
∫today∞(Learn+Summary+Coding)=Success