将 "int* pointer" 与常量内存地址进行比较

compare "int* pointer" with constant memory address

如何比较指针值与常量内存地址?

#define ADR 0x2000
unsigned int * po;
if(po<ADR) { };

以上代码有效,但会给出警告 "comparison between pointer and integer"

问题是你实际上是这样做的:

unsigned int * p;
if(p<0x2000) {};

其中 0x2000 是一个整数。您可以使用强制转换解决此问题:

#define ADR 0x2000
unsigned int * p;
if(p<(unsigned int*)ADR) {};

尽管更好的选择可能是像这样将强制转换实际添加到 #define 中:

#define ADR ((unsigned int*) 0x2000)

正如@Alter Mann(隐晦地)指出的那样,从技术上讲,您实际上应该将指针转换为整数。有关详细信息,请参阅 this answer

将定义设为 'pointer'。

#define ADR ((unsigned int*) 0x2000)
unsigned int * po;
if(po<ADR) { };

此外,我强烈建议使用 stdint.h 类型来进行此类定义。以防编译器和硬件对 int 的大小有不同的理解。

也使用正确的属性。 定义固定地址通常意味着某种内存映射 io。 那么你必须使用 volatile 告诉编译器该地址的内容可能会发生意外变化。

如果它是只读地址,请使用 const 限定符。

#include <stdint.h>

#define ADR ((volatile uint16_t*) 0x2000)
uint16_t * po;
if(po<ADR) { };