爬虫121 发表于 2024-10-8 20:09:01

请问char *p2 =(char*)(&num);如何理解?

如题,谢谢

#include<stdio.h>

int main()
{
    int num = 97;
    int *p1 = &num;
    char *p2 = (char*)(&num);
    printf("%d\n",*p1);
    printf("%c\n",*p2);
    printf("Hello world!");
    return 0;
}

FishC 发表于 2024-10-8 20:09:11

在这段代码中,`int num = 97;` 声明了一个整数变量 `num`,它被初始化为 97。

1. `int *p1 = &num;`:
   - 这里 `p1` 是一个整数指针,指向 `num` 的地址。`*p1` 通过解引用来获取 `num` 的整数值 97。

2. `char *p2 = (char*)(&num);`:
   - 这行代码将 `num` 的地址强制转换为字符指针类型 `char*`,并赋值给 `p2`。
   - 强制类型转换 `(char*)` 使得指针把整数的地址视作字符数据的地址。
   - `*p2` 访问的是这个地址处的第一个字节。在类似小端存储的系统中,97 对应的 ASCII 字符是 `'a'`,因此打印时会得到字符 `'a'`。

总结来说,这段代码展示了通过不同类型的指针访问同一块内存区域的能力,并通过不同的解引用方式输出整数的值和对应字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

很cool的阳 发表于 2024-10-12 10:02:34

在C语言中,char *p2 = (char*)(&num); 这行代码的意思是将整数变量 num 的地址转换为 char 类型的指针。

这里的 &num 是取 num 变量的地址,它是一个指向 int 类型数据的指针,因为 num 是 int 类型的。但是,由于 int 类型的大小可能不是1个字节(比如在某些系统上可能是4个字节),直接将 int 类型的指针赋值给 char 类型的指针可能会造成类型不匹配。
页: [1]
查看完整版本: 请问char *p2 =(char*)(&num);如何理解?