先看下面的代码:

#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

C指针类型转换问题的更多相关文章

  1. C语言中将0到1000的浮点数用强制指针类型转换的方式生成一幅图像

    搞过计算机图像的人都知道,图像中的每一个像素通常为一个整型数,它可以分成4个无符号的char类型,以表示其RGBA四个分量.一幅图像可以看做是一个二维整型数组.这里我会生成一个float数组,其数组大 ...

  2. 43.c++指针类型转换

    数据类型转换(static_cast) //数据类型转换 printf("%d\n", static_cast<int>(10.2)); 指针类型转换(reinterp ...

  3. c++ 指针类型转换

    1.数据类型转换(static_cast) //数据类型转换printf("%d\n", static_cast<int>(10.2)); 2.指针类型转换(reint ...

  4. C++_知识点_指针类型转换

    #include <iostream> using namespace std; int main(){ ] = {, , , , , , , , , }; int* p = (int*) ...

  5. C++智能指针类型转换

    #include <iostream> #include <memory> struct Base { int a; virtual void f() const { std: ...

  6. [翻译]类型双关不好玩:C中使用指针重新解释是坏的

    原文地址 Type punning isn't funny: Using pointers to recast in C is bad. C语言中一个重新解释(reinterpret)数据类型的技巧有 ...

  7. 对象布局已知时 C++ 对象指针的转换时地址调整

    在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时 ...

  8. 【面经】【转】C++类型转换

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:type b = (type) a. C++风格的类型转换提供了4种类型转换操作符来应对不同场景的应用. const_cas ...

  9. C++ 四种强制类型转换

    来自csdn:http://blog.csdn.net/hgl868/article/details/46619399 C风格的强制类转换(Type Cast)很简单,不管什么类型的转换统统是: TY ...

随机推荐

  1. OC静态代码检查实战

    此文已由作者杨晓授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Mac OS系统上,采用Xcodebuild Analyze命令和OClint工具,对iOS项目进行静态代码 ...

  2. C++开发工程师面试题库 1~50道

    1.    指出以下变量数据存储位置 全局变量int(*g_pFun)(int);g_pFun=myFunction;g_pFun存储的位置(A ) 为全局的函数指针 指向空间的位置( B) 所有函数 ...

  3. 51nod 1103【鸽巢原理】

    思路: 这道题嘛有些弯还是要转的,比如你说让你搞n的倍数,你别老老实实照她的意思去啊,倍数可以除法,取膜 . 因为n个数我们可以求前缀和然后取膜,对n取膜的话有0-n-1种情况,所以方案一定是有的,说 ...

  4. hdoj1074【A的无比爆炸】

    啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,一开始我就不知道怎么写,然后看了题解是状压DP,后来去看了看状压DP也就这样嘛,但是难点,可以说是不熟悉的地方吧...如下: 第一.我们能很快的知道状压DP的原理: ...

  5. LCA Codeforces 100685G Gadget Hackwrench

    题目传送门 题意:一棵有向的树,问u到v是否可达 分析:假设是无向树,DFS时正向的权值+1,反向的权值-1,然后找到LCA后判断dep数组和d数组就可以了 /******************** ...

  6. linux系统文件目录解析

    /bin 二进制可执行命令  /dev 设备文件(硬盘/光驱等)  /etc 系统管理和配置文件  /etc/rc.d 启动的配置文件和脚本  /home 用户主目录,下面会有以登录用户名作为文件夹名 ...

  7. Nginx重写规则

    Nginx的重写规则,依赖于pcre库(perl compatible regular expression).所以在安装的时候一定要让nginx支持这个功能,以及安装pcre-devel,prce. ...

  8. Spark MLlib编程API入门系列之特征提取之主成分分析(PCA)

    不多说,直接上干货! 主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法. 参考 http://blo ...

  9. Unity Mesh 初体验

    什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是 ...

  10. js数组去重的三种方式的比较

    做前端的,一般实现功能是主要的,但是重中之重却是在做到功能完善的情况下提高性能. 1.遍历数组法 实现的思路:构建一个新的数组存放结果,for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组 ...