(char *)&a这个什么意思
int i = 256;char *p = (char *)&i;
printf("%d\n",*p);
return 0;
这是什么意思 输出是0完全蒙圈 变量i的值是256 = 100H
在内存中是这样的
然后你把i的地址赋给char指针p
(char *)这个是强制转换 因为 &a 类型是int*强制转换到char*
然后p 就指向0了 然后输出
本帖最后由 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个字节):
patton88 发表于 2016-8-7 20:29
VC6中int i在内存中的存放情况(红框包含的4个字节):
谢谢 迷雾少年 发表于 2016-8-7 20:20
变量i的值是256 = 100H
在内存中是这样的
谢啦
页:
[1]