一,strlen函数的介绍
strlen是C语言标准函数库中的标准函数,其功能是:计算字符串的长度,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
但是strlen返回值是size_t,这是无符号数,unsigned int
看一个代码:
看到这个代码,可能一些好兄弟,会以为输出<,但是正好相反
为什么输出>呢,
因为返回值是unsigned int,存储时是用补码形式存储,无符号的3 - 无符号的6等于-3,补码是
1000 0000 0000 0000 0000 00000 0000 0011
因为是无符号数,没有符号位的概念,这将是一个非常大的正数。肯定大于0。所以输出>
二,sizeof操作符的介绍
sizeof是运算符,不是函数,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。
它在编译时起作用,而不是运行时。
看下面一段代码:
解读代码:i是全局变量,不初始化的情况下,默认是0,局部变量不初始化的情况下,默认是随机值。i--之后变成-1了。sizeof(i)为4,因为整型是4个字节。
难道是-1>4? NO,肯定不是的啦
因为,sizeof这个操作符,算出的结果是unsigned int,有符号整型和无符号整型比较大小的时候,会把有符号整型转化为无符号整型,
-1是很大的无符号整型数。存储的时候是补码。。。所以输出的是 >。。。。。。