两个指针的逻辑与循环直到程序中断

Logical AND of two pointers to loop until program break

我有循环遍历堆块 space 的代码,直到程序中断。

size_t* block = heap start;
while (block&&block < (size_t*)sbrk(0)){

    block = current chunk + next chunk;
}

我不明白逻辑与(值为真)如何满足关系运算符的条件。循环正确地递增地址直到堆的末尾,但比较对我来说没有意义。这个操作是什么意思?

您没有正确解析运算符优先级。

block&&block < (size_t*)sbrk(0)

等同于

block && (block < (size_t*)sbrk(0))

因为 < 的优先级高于 &&.

所以它首先检查block不是空指针,然后检查它是否小于sbrk(0)

每次循环都检查是否为 null 并不是真的有必要,因为循环内的计算永远不会产生空指针。所以这可以写成:

if (block) {
    while (block < (size_t*)sbrk(0)) {
        block = current chunk + next chunk;
    }
}