指针的强制类型转换
这个问题困惑很久了,今天上午终于弄明白了 *_*;
先看下面的例子
#include <stdio.h>
int main(void){
int *ip;
int a[2]={0x301,0x44444444};
ip = a;
printf("*ip=%x, *(ip+1)=%x/n",*ip,*(ip+1));
printf("*(char *)ip=%x, *((char *)ip+1))=%x",*(char *)ip,*((char *)ip+1));
return 0;
}
运行后的结果如下
其实放在内存的内容都是二进制编码,只是拿出来的类型依照指针类型而定,更确切的应该说成只是在处理内存时是依照指针类型而定,比如用(char *)作强制转换,则将来处理相应的内存地址时是按字节为单位处理的,如果用(int *)则将按4个字节为单位进行处理,它们的差异会是巨大的。
现在我们来分析上面的结果
1.int *ip 按四个字节取值,由于a是int数组,所以每个元素都是int型的,前四个字节是Ox0301,后四个字节是0x44444444
2.char*ip按一个字节取值,a的分析同上,由于0x代表16进制,所以0x0301每个数字占用4位,以个字节是8位,所以头一个字节是低位01,第而个字节是高位03
*((char *)ip+1) *((char *)ip)就使用了强制类型转换,呵呵,明白了吧
本文转自:http://blog.myspace.cn/e/401196777.htm 谢谢Jonny的分享。