qq1242009750 发表于 2016-8-7 20:04:16

(char *)&a这个什么意思

int i = 256;

    char *p = (char *)&i;
    printf("%d\n",*p);
    return 0;

这是什么意思 输出是0完全蒙圈

迷雾少年 发表于 2016-8-7 20:20:08

变量i的值是256 = 100H
在内存中是这样的

然后你把i的地址赋给char指针p
(char *)这个是强制转换   因为 &a 类型是int*强制转换到char*

然后p 就指向0了 然后输出

patton88 发表于 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个字节):

qq1242009750 发表于 2016-8-8 17:26:32

patton88 发表于 2016-8-7 20:29
VC6中int i在内存中的存放情况(红框包含的4个字节):

谢谢

qq1242009750 发表于 2016-8-8 17:27:33

迷雾少年 发表于 2016-8-7 20:20
变量i的值是256 = 100H
在内存中是这样的



谢啦
页: [1]
查看完整版本: (char *)&a这个什么意思