一个 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
.
这完全无法移植。
我很难理解这行代码是如何工作的。
#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
.
这完全无法移植。