第一句话:变量最好由操作系统分配在空闲的地址。0x12ff7c这个地址是什么用途,我们不清楚。这个地址可能受操作系统保护,我们无权访问。这个地址可能保存着其它应用程序的数据,我们对这个地址读写可能破坏其它应用程序。野指针通常说的是不受管束不守规矩的指针。
第二句话:0x12ff7c字面值是整型值,不能用*0x12ff7c间接访问。我们必须先把0x12ff7c转换成指针类型,再间接访问。书上把它转换成int类型指针,即(int *)0x12ff7c。第二句话的类型说明部分是(int *)。(int *)把0x12ff7c强制转换成int类型地址,即int类型指针常量。
地址空间就像一个尺子,编号0到0xffffffff,malloc分配内存后,某个地址上就放了一个盒子,这个盒子可以记录一个值。
没有分配盒子的地址是“野”的。你可以有编号,但是不能访问,访问会出错。
分配后就可以放东西了。
0x12ff7c是一个数值,指针有特素类型,必须用(int *)0x12ff7c格式写,其中(int *)就是强制转换符号。
感觉你的这本书上讲的很空洞。其实意思应该是,它只对指针进行了定义,但是没有对指针进行初始化,所以它的值是随机的,这也就是你真本书上说的“野”的意思。第二句应该是说,强制转换符对指针不具有普遍的意义,即不能强制 转换。就像下面的例题,对指针p的定义是void类型,就是无符号型,下面要以整形形式输出,涉及到强制转换,就行不通了。只有把真正p定义成int类型,即int *p,才能用%d输出。