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

标签 c pointers memory comparison microcontroller

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

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

上面的代码有效,但它给出了一个警告“指针和整数之间的比较”

最佳答案

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

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了解详情。

关于将 "int* pointer"与常量内存地址进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29037386/

相关文章:

c - 当两个进程等待同一个子进程时会发生什么?

c - 如何告诉 C 编译器不要重叠我的字符串

检查缓存中是否存在 Kerberos 票证

r - 使用对预先存在的向量的引用创建 data.table

c++ - 为什么 int 的大小在某些编译器中会有所不同?

c - 从包含指针的结构中以十六进制打印原始数据

c++ - 如何访问 std::list 的第一个元素?

C++ 指针与数组表示法

c++ - 在 C++ 中使用 std::unique_ptr 管理原始内存

c - 为什么它不违反分段?