c编译器把每个指针和类型信息联系起来,这样就可以根据指针的类型,生成不同的机器码来访问存储在指针所指向位置处的值。尽管C编译器维护这个类型信息,但它生成的实际机器级程序并不包含关于数据类型的信息。
也就是说,可以声明一个指针变量来改变其他数据的数据类型(以指针的类型信息访问内存中其他数据类型变量所代表的机器码),例如:
声明并定义一个变量,并打印出来,
char str[]="hello";
printf("%d",str);
这里打印出来的是变量str的地址,
如果打印语句改一下,
变成:printf("%d",*str);
那么这里打印出来的就是这个数组变量str的首地址上的‘h’;
在变成:printf("%d"*((int *)str));
那么这里打印出来的就是以指针的类型信息对str指向的内存数据的解读,
即打印出来的数字是‘h’ 'e' 'l' 'l'对应ascii码的排序解读。有可能是6c6c6568;
即,指针是对指针所指向的值的再解释。



