从我所了解的'&'运算符开始,它返回内存中操作数的基地址。了解'&'运算符
让我们想象一下以下情形(如我的机器上):
- 的sizeof(INT)= 4个字节
- 的sizeof(浮动)= 4个字节
- 的sizeof(焦炭)= 1个字节
现在,如果我写的东西是这样的:
void main() {
int i = 5411;
int *ip = &i;
char *c = &i;
printf("%d",*ip);
printf("%c",*c);
}
第一个printf()应该给我5411.说到第二个printf(),我的基地址包含10101001(char类型指针的高阶8位= 1字节)。 因此* c应该给我169,当它转换成%c时是一个无效的字符。
但编译器给我'#'或其他有效的输出。为什么这样?任何投入?
编辑(从作者的评论答案的一个拍摄):
这只是一个虚拟的情况下,因为我是从实际的机器了。
实际情况是我= 5411
在任何情况下,如果您尝试“打印”“字符”,它将显示为字符,而不是相应的整数代码。 – 2010-10-31 20:20:56
可能与使用字符编码有关,我猜想。 – 2010-10-31 20:21:48
是的,我也同意这一点。但是必须有一个从上一次printf()获得'#'值的理由。这不是垃圾值。 – 2010-10-31 20:23:03