在下面的程序中,为什么在正常的 int 变量情况下字符数据打印正确,而在 int 中为什么不能正确打印数据?
案例一
#include <stdio.h>
int main()
{
int *i = NULL;
char s = 'A';
i = (int *)&s; // storing
printf("i - %d\n",*i);
return 0;
}
输出:
i - 1837016897
为什么这里没有打印 65 值?
案例二
#include <stdio.h>
int main()
{
int *i = NULL;
char s = 'A';
i = (int *)&s; // storing
printf("i - %c\n",*i); // if we display character stored here
// then it is printed properly
return 0;
}
输出:
i - A
案例三
#include <stdio.h>
int main()
{
int i = 0;
char s = 'A';
i = s;
printf("i - %d\n",i); // in this case data is properly printing
return 0;
}
输出:
i - 65
最佳答案
int 是 4 个字节长,char 是 1 个字节。这意味着您不能像这样转换。您正在获取一个 1 字节变量的指针,并告诉程序将其解释为一个 4 字节变量,因此内存中它后面的任何内容也将在程序中使用。
1837016897 的十六进制值变为 0x6D7EA741,其中最后一个字节 (0x41) 实际上是十进制 65,因此该字符确实出现在您的结果中(如果您想知道为什么它是最后一个字节而不是第一个字节,这是因为字节顺序——如果你愿意,你可以自己阅读)。
关于c - 从字符到整数指针的变量存储不能正确检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38200036/