zoukankan      html  css  js  c++  java
  • C指针类型转换问题

    先看下面的代码:

    #include<stdio.h>
    
    int main ()
    {
    int a;
    char *x;
    x = (char *) &a;
    a = 512;
    x[0] = 1;
    x[1] = 2;
    printf("%d
    ",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

  • 相关阅读:
    FMDB的使用方法(附Demo)
    简单了解SQL(结构化查询语言)
    sql面试题(学生表_课程表_成绩表_教师表)
    iOS
    数据库的关系代数六大基本操作符
    数据库视图
    刚装上最新node,npm install报这个错误!求ndoe大神解答!!!
    手把手教你搭建 vue 环境
    Node.js/Vue环境搭配安装
    CentOS系统下Redis安装和自启动配置的步骤
  • 原文地址:https://www.cnblogs.com/ranwuer/p/8361351.html
Copyright © 2011-2022 走看看