C指针类型转换问题
2024-08-31 13:57:20
先看下面的代码:
#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
最新文章
- Edge.js:让.NET和Node.js代码比翼齐飞
- recyleView使用笔记
- Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统
- PLSQL Developer不支持Oracle 64位客户端解决方法
- NSRunLoop &;&; NSTimer
- HTMl5/CSS3/Javascript 学习推荐资源
- ASP.NET读取EXCEL文件的三种经典方法(转)
- FR #1题解
- 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。
- 什么是image crop?
- 浅谈RFID电子标签封装技术
- hdoj 1286 找新朋友 【数论之欧拉函数】
- Qt4_VS10 程序打包发布
- TCP传输协议使用
- node基础篇二:模块、路由、全局变量课堂(持续)
- SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?
- Jupyter Notebook
- 5.2、Android Studio截图
- jquery判断表单内容是否为空
- hdu2838树状数组解逆序
热门文章
- Unity里的人物驱动/换装备/换武器/换衣服/卡通重定位(转)
- python __builtins__ list类 (42)
- Windows API 搭建OpenGL窗口
- camshift.py OpenCv例程阅读
- 51Nod 1094 和为k的连续区间
- swiper.js插件的使用
- AtCoder Grand Contest 003 E - Sequential operations on Sequence
- AtCoder Regular Contest 083 E - Bichrome Tree
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C
- centOS 部署服务器(二)