【发布时间】:2019-05-08 02:24:08
【问题描述】:
int i = 0, j = 0;
int *a , *b;
a = &i + 1;
b = &j;
printf(" %p \n ",a);
printf(" %p \n ",b);
if(a==b)
printf(" yo \n");
输出:
0x7ffda8e133a4
0x7ffda8e133a4
a 和 b 一样,printf 仍然不执行。
当我将 a 和 b 作为普通变量时,这很有效。 (int a, b;)
【问题讨论】:
-
您能详细说明一下吗?这是否违反任何 C 标准?
-
比较不指向同一数组元素(或超过数组末尾)的指针是未定义的。检查您的输出汇编代码,了解具体情况。
-
未定义的行为表示未定义的行为,这意味着对于将要发生的事情没有标准。此外,您正在使用两个未初始化的变量 (
int i, j)。 -
我认为编译器正在进行编译时优化并删除这段代码。
-
@tkausl 不,不是。任何有效的指针(包括过去的结束)都可以进行相等比较。在 C 和 C++ 中都是如此。没有规定它们应该指向同一个对象(Carl Norum 将关系比较规则与相等比较规则混淆了)
标签: c