比较两种不同类型的指针

msc*_*msc 2 c types pointers compare

在C编程中,比较两种不同类型的指针,如下所示:

int i = 1;
double d = 2.5;

int *ip = &i;
double *dp = &d;

if(ip != dp) // is it UB?
    printf("Not same\n");
Run Code Online (Sandbox Code Playgroud)

ip != dp未定义用C行为?

AnT*_*AnT 6

C中的直接比较ip != dp无效.!=运算符的规范在一次比较中不允许混合int *double *指针.它是C中的约束违规(又称"编译错误").符合标准的C编译器将通过发出诊断消息将您的代码报告为无效.

接下来发生的事情仅取决于您的编译器.它与C语言无关.

将此代码称为"产生未定义行为的C代码"会产生误导.这是正式的,但它与说"War and Piece"的文本是"产生未定义行为的C代码"(在一些接受它的奇怪C编译器中)完全一样.

这里的关键点是这种代码语言约束意味着它根本不是C代码.