【发布时间】:2013-10-11 19:47:54
【问题描述】:
int *x = 3;
int *y = 3;
if (x == y) "this statement evaluates to true" (pointer equality statement)
if (*x == *y) "this statement evaluates to true"
是不是指针相等语句变为真的原因,仅仅是因为编译器看到两个“静态”数字“3”并说,嘿指向同一个地方?或者一般整数有什么魔力。
很明显,引用一个整数指针(在这种情况下)与不取消引用是一样的。
我已经看到了一些与字符串有关的问题示例 (Addresses of two pointers are same),但想进一步澄清它。
【问题讨论】:
-
你使用了什么编译器和选项
-
当您取消引用 x 时,您正在查看内存地址“3”。你很幸运此时没有出现段错误。
-
“仅仅因为编译器看到了两个“静态”数字“3”,然后说,嘿把这个指向同一个地方吗? - 不。无需为此进行优化即可按原样运行。只是常识。
-
@abelenky 倒霉。
-
如果您强制操作系统将 I/O 端口、硬件寄存器甚至共享内存映射到内存空间的地址 3,则映射内存的连续读取可能不会返回相同的值。但是,如果您进行这种映射,您需要将指针声明为
volatile以防止编译器优化读取。