C语言陷阱——隐式类型转换

C语言陷阱——隐式类型转换

C语言有隐式类型转换,即如果将无符号类型和有符号类型一起运算,会将有符号类型转换成无符号类型,这种操作如果放在while和if语句的条件判断中,会有想不到的结果,所以要小心小心~

举例:

strlen函数返回值是size_t,strlen不包含‘\0’

#include 
#include 
int main()
{
	const char*str = "abcdef";
	int i = -1;
	
	if(strlen(str) > i){
		printf("Yes\n");
	}
	else{
		printf("No\n");
	}
	printf("-1的无符号类型:%u\n", -1); 
	
	return 0;
}~~~

运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412103903573.PNG)
str的长度是6,必然大于-1,但运行结果是No,这说明,整型i在和size_t类型的数作比较时,-1变成了size_t类型,**即有符号数变成了无符号数**,是一个很大的数,远远大于6,所以输出No.

你可能感兴趣的:(C)