c - 从字符到整数指针的变量存储不能正确检索数据

标签 c pointers char integer type-conversion

在下面的程序中,为什么在正常的 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/

相关文章:

arrays - 访问(传统)记录的字段

swift - 尝试使用 Swift 获取 String 中单个字符的 ASCII 值

MySQL CHAR 数据类型

c - 从C中的管道读取字符

c - 未定义类型的无效使用 ‘struct book_implementation’

c - scanf 需要比请求更多的输入

c - 将 EOF 写入管道

Python C API 在不构建元组的情况下返回多个值/对象

c - 指针到指针在 C 中如何工作? (你什么时候可以使用它们?)

c++ - 字符串分配期间访问冲突写入位置错误