指针与指针的有意比较; C中的整数

时间:2013-09-27 16:14:03

标签: pointers gcc integer compare

GCC编译器能否正确处理以下内容?

uint32 fn(uint32 adr, uint8 *ptr) {
    return (ptr==adr);
}

换句话说,它会自动将ptr转换为存储指向的内存地址的整数吗?

1 个答案:

答案 0 :(得分:1)

是的,GCC会通过诊断代码中的错误来正确处理它。

C在整数类型和指针类型之间没有隐式转换(除了整数常量0的特殊情况被视为空指针常量),==无法比较整数和指针类型。

要更正错误,请添加转换(显式转换)以将adr转换为uint8*类型:

return ptr == (uint8*)adr;

或者,更好的是,首先制作相同类型的两个参数:

uint32 fn(uint8 *adr, uint8 *ptr) {
    return ptr == adr;
}

除非你有一些特定的理由adr需要是一个整数而不是一个指针,但你没有告诉我们这个原因是什么。

C更强类型,很多人都认为它是。