整数和零值比较
我们先解答个小疑惑:
编译器会自动默认给main函数增加一个return 0;
但是其他函数如果有返回值,就一定要写return语句!!!
我们看下面示例:
如果是short a,也可以比较,因为short也是整数,但是做关系运算,参与运算参数的类型必须一致,如果类型不一样,就是左边的类型要转成右边的类型 a(short)提升为int
我们看下面代码:
变成赋值表达式,现在相当于a是0,是false,这个if语句就永远进不去了
所以,编程规范如下:
下面这种写法编译器直接提示错误了:
如果是下面这样写:
变成赋值表达式,现在a是1,永远是真的,永远进入这个if语句
字符类型和零值比较
字符在本质上也是数字!!!
我们在代码写0和’\0’是一样的 都表示0
把字符转成整数:编码
把整数转为字符:解码
布尔类型和零值比较
原生的意思是:可以直接使用,不需要包含头文件,是编译器的内置类型。
我们在C文件中如何使用bool:
我们看看这个源代码:
C语言的true是1,false是0
因为bool是宏定义出来的,所以显示紫色。
bool值只有2个值:true,false
bool类型的比较千万不要这么写:
因为:
我们应该这么写:
因为在不同的系统上,非0可能都是true,也有可能只定义-1是true。
但是0一定是false
我们应该这么写:
关于逻辑取反:
下面这样写不好:因为a>b本身产生的关系表达式产生的结果就是逻辑值了!!!
我们应该这么写比较好:
bool本身就是逻辑值,true 或者 false
指针类型和零值比较
我们不要像下面这么写,虽然在C中没有问题,但是在C++有问题,C++对类型的匹配非常严格!!! 因为int*和int类型不匹配。
但是在C编译器中,地址是可以看作整数来理解的,因为是16进制表示的整数嘛。
我们应该像下面这么写:
在C++中,NULL是0
在C中,NULL是((void*)0)
指针占用的内存大小和类型是没有关系的,都是4字节(在32位系统下)
我们再看:
下面这种写法错误,相当于拿地址和a的内存的值比较
我们再看: