C指针类型转换问题

C指针类型转换问题

先看下面的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include<stdio.h>

 

int main ()

{

int a;

char *x;

x = (char *) &a;

a = 512;

x[0] = 1;

x[1] = 2;

printf("%d\n",a);

 

return 0;

// 针对x86的处理器来说,其结果为513

  


原因

程序首先声明了一个int变量,在我的电脑中,此int占用4字节。然后声明了一个x指针,同样,在我的电脑中它占用8字节。然后将a的内存地址赋值给x指针,注意这里用到了类型转换:x=(char *) &a。如果不使用类型转换,x指向的int型的内存单元大小为4字节,如果使用了类型转换,x指向的char型的内存单元大小为1字节。

 

变量a的值为512,用4个字节的普通二进制表示就是:

    00000000 00000000 00000010 00000000

由于x86 CPU的字节序为小端序(最低有效位在最高有效位的前面),所以前面的二进制以小端序的表示方式为:

    00000000 00000010 00000000 00000000

操作方式是:先获取最右边的8位数字,然后放到新行的左边;然后获取下一个8位数字,再放到新行的左边,它紧挨着上一个8位数字。以此循环操作,直到数据读取完毕。注意的是一个字节(8位)里的数字顺序是不变的。

 

x[0]表示指向a内存区域的第一个字节,并设置为1,此时的a内存表示为:

    00000001 00000010 00000000 00000000

然后是x[1]设置为2,则a内存表示为:

    00000001 00000010 00000000 00000000

然后将a内存转为普通二进制表示方式(方式为从右到左读取):

    00000000 00000000 00000010 00000001

最后的结果为:

    513

 

最后修改时间:2018-01-26 19:55

 

转载地址

https://www.cnblogs.com/ranwuer/p/8361351.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值