总是用合适的指针类型来装数据是个好主意。为了说明可能存在的陷阱,考虑下面的代码。将一个整数指针赋值给一个短整数指针:
这段代码的输出如下:
注意,看起来地址100处的第一个十六进制数字要么是7,要么是f,这取决于它是以整数还是短整数显示。这个明显的矛盾是在小字节序机器上运行代码的结果。图7-3说明了地址100处的常量的内存布局。
如果我们把它当做短整数,那就只用前两个字节,于是就得到了短整数值-1。如果我们把它当做整数,就会用4个字节,于是得到2 147 483 647。这类微妙的问题正是导致C和指针如此难的原因。