gpt4 book ai didi

c - 如何将 char 指针转换为 int 指针?

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:35 26 4
gpt4 key购买 nike

我正在学习 C。当我浏览那里的指针时,我注意到一些我无法理解的奇怪行为。将字符指针转换为整数指针时,整数指针持有一些奇怪的值,与 char 或 char ascii 代码没有合理关系。但是在使用 '%c' 打印转换变量时,它会打印正确的 char 值。

使用“%d”打印给出了一些未知的数字。

printf("%d", *pt); // prints as unknown integer value that too changes for every run

但是当打印为 '%c' 时

printf("%c", *pt); // prints correct casted char value

整个程序:

int main() {

char f = 'a';
int *pt = (int *)&f;

printf("%d\n", *pt);
printf("%c\n", *pt);

return 0;
}

请解释 char 到 int 指针转换的工作原理并解释输出值。

编辑:

如果我对程序进行以下更改,则输出将符合预期。也请解释一下。

#include <stdio.h>

int main() {

char f = 'a';
int *pt = (int *)&f;

printf("%d\n", *pt);
printf("%c\n", *pt);

int val = (int)f;
printf("%d\n", val);
printf("%c", val);
return 0;
}

输出:

97
a
97
a

也请解释此行为。

最佳答案

对于 C 语言指定的内容,这只是普通的未定义行为。你有一个 char您正在读取 int 的内存区域大小;结果未定义。

至于可能发生的情况:C 运行时最终会在 main 之前将一些随机垃圾转储到堆栈中。甚至被执行。 char f = 'a';碰巧将垃圾的一个字节重写为已知值,但填充对齐 pt意味着剩余的字节根本不会被重写,并且其中包含“运行时留下的任何内容”。所以当你读到 int out,在小端系统上,低字节等于'a'的值, 但高字节是恰好留在填充空间中的垃圾。

至于为什么%c有效,因为低字节仍然相同,并且 %c只检查 int 的低字节前提是,所有的垃圾都被忽略了,一切都按预期进行。不过,这只适用于小端机器;在大端机器上,它将是初始化为 'a'high 字节, 但低字节(垃圾)将由 %c 打印.

关于c - 如何将 char 指针转换为 int 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229665/

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