本帖最后由 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个字节):
|