【发布时间】:2021-11-21 22:18:45
【问题描述】:
我很难理解这行代码是如何工作的。
#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 是:6513249
字符串是:abc
说清楚,这个程序应该打印这个字符串,我只是不太明白它是怎么做的。
我目前的理解是,当你将整数类型的变量的地址转换为char指针类型的指针时,指针只指向int变量所在的第一个内存地址。
我不明白的是如何将指针(据我了解将传递 a 的第一个内存地址)转换为字符串“abc”。我对铸造和打印指针的理解是否存在缺陷?
【问题讨论】:
-
此代码具有依赖于实现的行为。这取决于该数字的二进制表示恰好与字符串
abc相同的事实。 -
@Barmar 是的,我很困惑的是在最后一个打印语句中它是如何被转换和打印的。是否获取二进制值然后将其转换为字符串?
-
@Barmar nvm,你的回答已经澄清了,谢谢!