|
发表于 2016-8-7 20:29:11
|
显示全部楼层
本帖最后由 patton88 于 2016-8-8 10:02 编辑
- // VC6 Win32 Console _MBCS
- #include <iostream>
- using namespace std;
- int main()
- {
- int i = 256;
-
- char *p = (char *)&i; // 取变量i的地址,强制转换为char *地址,赋给char *变量 p
- // 在VC系统中,int整型变量占4个字节,char类型数据只占1个字节。
- // 所以这种转换将发生前面3个字节的数据截断丢失的现象,只能保留最后1个字节的数据。
- // 由于256刚好超出1个字节的表示范围,高位的1存放在第2个字节,
- // 最后1个字节全为0。所以这里的转换结果为0
- // 这里的 * 号是去引用操作符,有的也称为提取操作符。
- // *p 的作用是取出char *类型p所指向的地址存放的数据,只取1个字节,所以结果为0
- printf("%d\n", *p);
- int *q = &i;
- // *q 的作用是取出int *类型q所指向的地址存放的数据,取出4个字节的完整数据,所以结果为256
- printf("%d\n", *q);
- // 由于127没超出1个字节的表示范围,数据都存放在最后1个字节里。所以转换结果为127
- i = 127;
- printf("%d\n",*p);
-
- return 0;
- }
- /* Result of Run :
- 0
- 256
- 127
- Press any key to continue
- */
复制代码
VC6中int i在内存中的存放情况(红框包含的4个字节):
|
|