一个 int 变量如何转换为 char* 打印一个字符串?

How does an int variable casted to char* print a string?

我很难理解这行代码是如何工作的。

#include <stdio.h>
#define NUM 6513249

int main()
{
        int a = NUM;
        char * pt = (char *) &a;
        printf("a is: %d\n", a);

        //Line I don't understand (I think)
        printf("string is: %s\n", pt)

        return 0;
}

预期和实际输出:

a is: 6513249
string is: abc

需要说明的是,这个程序应该打印这个字符串,我只是不太明白它是怎么做到的。

目前我的理解是,将整型变量的地址转换为char指针类型的指针时,指针只指向int变量所在的第一个内存地址。

我不明白的是,据我所知,指针将传递 a 的第一个内存地址,它是如何转换为字符串“abc”的。我对转换和打印指针的理解有缺陷吗?

数字 6513249 的十六进制值为 00636261。在小端架构上,字节首先存储在最低位,因此它在内存中存储为

61 62 63 00

61是[=14=的ASCII码],62是[=16=的ASCII码],63是[=的ASCII码18=]。所以这与字符串 "abc" 的内存内容相同(00 是空终止符)。因此,如果我们将 a 的地址视为字符串的开头(通过将 &a 转换为 char*)并打印它,我们将得到 abc.

这完全无法移植。