指针比较警告

Pointer comparison warning

提问人:Kay 提问时间:8/25/2022 更新时间:8/25/2022 访问量:51

问:

我正在对内存空间中从 0 到 0x0020000 的所有单词进行 16 位校验和:

uint16_t checksum = 0;
    for (uint16_t * word_val = 0; word_val < 0x0020000ul; word_val++)
    {
        checksum += *word_val;
    }

我收到警告“指针和整数之间的比较”。如何使此警告消失?

C 指针 警告

评论

1赞 Fe2O3 8/25/2022
您似乎正在尝试访问您可能不可用的内存。在我看来不健康......
0赞 chux - Reinstate Monica 8/25/2022
@Kay,请注意,in 在这里没有用处。l0x0020000ul

答:

3赞 Joël Hecht 8/25/2022 #1

word_val是一个指针,是一个整数,比较它们会导致警告。0x0020000ul

为了防止此警告,只需将整数常量转换为uint16_t指针,以便比较相同类型的数据:

uint16_t checksum = 0;
for (uint16_t * word_val = 0; word_val < (uint16_t *)0x0020000ul; word_val++)
{
    checksum += *word_val;
}