上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.6 掌握C语言需要建立类型的观念
在初学指针的时候,很多人会有这样的想法:我认为2000是一个地址,所以我可以将它赋给一个指针类型的变量,就像这样:
int * p; p = 2000;
或者,我认为2002是一个变量的地址,一元*运算符用来间接访问那个变量,所以我可以这样写:
* 2002 = 10086;
初学者有这样的认识应该是正常的,但这样做并不合法。首先,我们在前面讲得很清楚,地址和指针不是一回事;其次,一元*运算符需要一个指针操作数。C语言有自己的类型系统,指针类型和整数类型是被区别对待的,你认为2002是一个地址,但C语言只知道它是一个整数——事实上,2002是一个整型常量。
再比如说,加性运算符+的两个操作数不能是指针类型。你想想看,将两个指针相加是什么意思呢?没有任何实际意义。水稻不能长在石头上,不同的运算符需要不同类型的操作数。在本章的剩余部分里,我们介绍整数类型的转换规则;在本书后面的章节里也将介绍类型和类型转换的知识。在本书的第12章里,我们将具体介绍C语言里的所有运算符和表达式,届时将分类详细介绍每种运算符的操作数类型及转换方法。
练习4.5
下面的程序片段合法吗?将它补充为一个完整的程序,然后上机试一试,看翻译器怎么说。
int m = 0, * p = & m, * q = & m; p += q;