我有以下代码段
int a = 10;
char *p = &a;
printf("%d", *p);
printf("%c", *p);
记忆中会发生什么?它会打印什么,为什么?
答案 0 :(得分:0)
char *p = &a;
违反了约束条款。您的编译器必须提供诊断消息,您不应忽略它。
有些编译器会说“警告”并默默地将代码转换为:
char *p = (char *)&a;
这样做的结果是p
仍指向与a
相同的内存位置,但p
具有不同的类型。如果您通过p
读取或写入,则存储a
表示的内存位置将被视为存储字符。这称为别名。
允许对char
进行别名,但一般情况下,不允许使用其他类型的组合。
阅读*p
将检索a
存储的第一个字节。打印的实际数字(可能)是实现定义的;常见系统会提供0
或10
。