指针的强制类型转换

先看下面的例子

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值