指针的强制类型转换

来源:互联网 发布:网络暴力算违法吗 编辑:程序博客网 时间:2024/05/11 00:28

先看下面的例子

#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)就使用了强制类型转换

原创粉丝点击