【发布时间】:2017-03-17 21:05:21
【问题描述】:
为什么它们打印不同的值。请详细说明。 一个文件是:
/* boo.c */
#include <stdio.h>
char main;
void p2()
{
printf("0x%X\n", main);
}
另一个文件是:
/* foo6.c */
void p2(void);
int main()
{
char ch = main;
p2();
printf("Main address is 0x%x\n",main);
printf("Char value is 0x%x\n",ch);
return 0;
}
我希望 p2 和 char ch 打印相同的值,但它们打印的值非常不同。 输出是:
0x55
Main address is 0x401110
Char value is 0x10
我无法得出这些值背后的原因(Main 和 char 值按预期工作,但不是我前面提到的 p2 输出)
【问题讨论】:
-
char可能是 8 位且已签名。指针可能是 32/64 位且无符号的。去图吧。 -
注意“Char”的值如何与“Main”的最后一个字节(2个半字节)相同,即
0x10。 -
在一个目标文件中,main 是一个字符,而在另一个目标文件中是一个函数指针。我认为没有定义将两者联系在一起。
标签: c pointers memory-address