【发布时间】:2020-11-19 06:09:59
【问题描述】:
我有一个类型化的指针typed,它是使用指针算法初始化的,以指向数组中的一个对象。我还有一个函数,它接受两个指针参数,第一个类型与上述指针相同,第二个是void *(请参阅下面代码中的myfunc())。
如果我将typed 作为第一个参数传递,另一个与typed 类型相同的指针作为第二个参数传递,然后在函数内比较它们是否相等,这是未定义的行为吗?
#include <stdio.h>
typedef struct S {int i; float f;} s;
void myfunc(s * a, void * b)
{
if (a == b) // <-------------------------------- is this UB?
printf("the same\n");
}
int main()
{
s myarray[] = {{7, 7.0}, {3, 3.0}};
s * typed = myarray + 1;
myfunc(typed, &(myarray[0]));
return 0;
}
更新:好的,所以我在上面发布我的问题后一天回来,有两个很好的答案(感谢@SouravGhosh 和@dbush)。一个比另一个早了不到一分钟(!),但从第一个 cmets 的外观来看,答案最初是错误的,只有在第二个答案发布后才更正。我接受哪一个?在这种情况下,是否有一种协议可以接受一个答案而不是另一个答案?
【问题讨论】:
标签: c undefined-behavior void-pointers equality-operator