C语言非常道
上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;