如果您创建整数变量的char * ptr存储地址会发生什么

时间:2015-03-07 00:47:06

标签: c++ c pointers

我有以下代码段

int a = 10;
char *p = &a;
printf("%d", *p);
printf("%c", *p);

记忆中会发生什么?它会打印什么,为什么?

1 个答案:

答案 0 :(得分:0)

char *p = &a;违反了约束条款。您的编译器必须提供诊断消息,您不应忽略它。

有些编译器会说“警告”并默默地将代码转换为:

char *p = (char *)&a;

这样做的结果是p仍指向与a相同的内存位置,但p具有不同的类型。如果您通过p读取或写入,则存储a表示的内存位置将被视为存储字符。这称为别名

允许对char进行别名,但一般情况下,不允许使用其他类型的组合。

阅读*p将检索a存储的第一个字节。打印的实际数字(可能)是实现定义的;常见系统会提供010