两个指针的逻辑与循环直到程序中断
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;
}
}
我有循环遍历堆块 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;
}
}