gpt4 book ai didi

c - 类型转换字符指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:25 24 4
gpt4 key购买 nike

我来自 Java 背景。我正在学习 C,我在其中完成了从 int 到 char 类型转换的代码片段。

int a=5;
int *p;
p=&a;
char *a0;
a0=(char* )p;

我的问题是,为什么我们使用 (char *)p 而不是 (char)p。

我们只是将 4 字节内存(整数)转换为 1 字节(字符)而不是与之相关的值

最佳答案

您需要将指针视为包含地址的变量。它们的唯一目的是向您展示在内存中查找的位置。

所以考虑一下:

int a = 65;
void* addr = &a;

现在 'addr' 包含 'a' 所在的内存地址你用它做什么取决于你。

在这里我决定将内存的那部分“看”成一个 ASCII 字符,您可以打印它来显示字符“A”

char* car_A = (char*)addr;
putchar(*car_A); // print: A (ASCII code for 'A' is 65)

如果你决定按照你的建议去做:

char* a0 = (char)addr;
  • 赋值的左边部分 (char)addr 将指针 'addr'(可能是 4 或 8 字节)转换为 char(1 字节)

  • 赋值的右边部分,被截断的地址,将被赋值为指针'a0'的地址

如果你不明白为什么它没有意义让我用一个具体的例子来澄清

假设'a'的地址是0x002F4A0E(假设指针存储在4个字节上)

  • '*addr' 等于65
  • 'addr' 等于 0x002F4A0E

当像这样转换它时 (char)addr 这变得等于 0x0E。所以行

char* a0 = (char)addr;

成为

char* a0 = 0x0E

所以 'a0' 最终会指向地址 0x0000000E 而我们不知道这个位置是什么。

我希望这能澄清你的问题

关于c - 类型转换字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com