一道题解读“类型强转”在内存中发生了什么
2016-06-12 00:26
423 查看
小结:
指针的值是所指元素分配内存大小,逻辑地址内存单元的地址
内存单元里面是所指元素的内容,以补码二进制存储,方便起见,化为16进制
要想弄懂,必须知道元素在计算机内存是咋存储的,也就是内存影像图
类型强转就是对所能读取内存单元的改变,指类在内存作用是,地址单元的映射长度
int main()
{
short x;
char x0,x1;
x=0x1122;
printf("x = 0x%x\n",&x);
printf("little= 0x%x\n",((char *)&x)+0); //每次指针加一,相当移动指类 char的大小
printf("big = 0x%x\n",((char *)&x)+1);
printf("little = 0x%x\n",&(((char *)&x)[0]));//目的与上面一样,不过一个类似移动指针间接访问
//一个用类似知道数组首地址进行的直接访问
printf("big = 0x%x\n",&(((char *)&x)[1]));
x0=((char *)&x)[0]; //低地址单元,相当知道了首元素地址,指针的匿名访问
x1=((char *)&x)[1]; //高地址单元
printf("x0=0x%x,x1=0x%x",x0,x1);// 若x0=0x11,则是大端; 若x0=0x22,则是小端......
return 0;
}
指针的值是所指元素分配内存大小,逻辑地址内存单元的地址
内存单元里面是所指元素的内容,以补码二进制存储,方便起见,化为16进制
要想弄懂,必须知道元素在计算机内存是咋存储的,也就是内存影像图
类型强转就是对所能读取内存单元的改变,指类在内存作用是,地址单元的映射长度
short a = 1 | 如图1 |
int b = 32; | 2 |
short * p_short = &a | 3 |
数值 | 内存单元地址 |
0x1 | 0xffeecca0 |
0x0 | 0xffeecca1 |
0xf | 0xffeecca2 |
0x1 | 0xffeecca3 |
0x0 | 0xffeecca4 |
0x0 | 0xffeecca5 |
0x0 | 0xffeecca6 |
oxa | |
oxc | |
oxc | |
oxe | |
0xe | |
0xf 0xf | 0xffeeccae |
{
short x;
char x0,x1;
x=0x1122;
printf("x = 0x%x\n",&x);
printf("little= 0x%x\n",((char *)&x)+0); //每次指针加一,相当移动指类 char的大小
printf("big = 0x%x\n",((char *)&x)+1);
printf("little = 0x%x\n",&(((char *)&x)[0]));//目的与上面一样,不过一个类似移动指针间接访问
//一个用类似知道数组首地址进行的直接访问
printf("big = 0x%x\n",&(((char *)&x)[1]));
x0=((char *)&x)[0]; //低地址单元,相当知道了首元素地址,指针的匿名访问
x1=((char *)&x)[1]; //高地址单元
printf("x0=0x%x,x1=0x%x",x0,x1);// 若x0=0x11,则是大端; 若x0=0x22,则是小端......
return 0;
}
<span style="font-size:24px;">int main() { short x; char x0,x1; x=0x1122; printf("x = 0x%x\n",&x); printf("little= 0x%x\n",((char *)&x)+0); //每次指针加一,相当移动指类 char的大小 printf("big = 0x%x\n",((char *)&x)+1); printf("little = 0x%x\n",&(((char *)&x)[0]));//目的与上面一样,不过一个类似移动指针间接访问 //一个用类似知道数组首地址进行的直接访问 printf("big = 0x%x\n",&(((char *)&x)[1])); x0=((char *)&x)[0]; //低地址单元,相当知道了首元素地址,指针的匿名访问 x1=((char *)&x)[1]; //高地址单元 printf("x0=0x%x,x1=0x%x",x0,x1);// 若x0=0x11,则是大端; 若x0=0x22,则是小端...... return 0; } </span>
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Linux C函数参考手册(PDF版)
- IE7降低内存和降低CPU的几个技巧
- C# partial关键字说明
- 如何高效的使用内存
- DOS下内存的配置
- Lua和C语言的交互详解
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- XP/win2003下发现1G的内存比512M还慢的解决方法
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- C#中的委托数据类型简介
- SQL语句实现查询SQL Server内存使用状况
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果