我正在迭代这样的结构数组:
typedef struct{
dword_t BaseAddrLow ; //Low 32 Bits of Base Address
dword_t BaseAddrHigh ; //High 32 Bits of Base Address
dword_t LengthLow ; //Low 32 Bits of Length in Bytes
dword_t LengthHigh ; //High 32 Bits of Length in Bytes
dword_t Type ; //Address type of this range.
} descBloque_t ;
检查内存是否有重叠。所以我已经通过了我的数组的开始地址和函数的条目数。
int checOverlaps(descBloque_t * descBloque, int numBloques){
dword_t carry;
int i = 0, flag = 0;
ptrDescBloque_t ptrDescBloque = (ptrDescBloque_t)descBloque;
do{
ptrDescBloque++;
carry = 0;
if(descBloque->BaseAddrLow + descBloque->LengthLow > ++descBloque->BaseAddrLow){
flag = 1;
printStrBIOS("\n\There is overlaps.");
break;
}
else{
i++;
descBloque++;
}
} while(i < numBloques);
return flag;
}
所以,我试过这样做:
if(descBloque->BaseAddrLow + descBloque->LengthLow > descBloque++->BaseAddrLow)
//THERE IS OVERLAPS!! :(
但是,当您执行以下操作时,似乎就像在数组中一样:
if(array[i] < array[i+1])
//DO SOMETHING
或者有可能,我不知道如何正确地做到这一点?我的实际解决方案是创建一个辅助指针,它位于前方的一个位置,但我认为它可以没有辅助指针。
EDIT1:在if语句中,我询问的是SAME指针descBloque
,但位于不同的位置。遗憾。
EDIT2:我也尝试过这个if语句,但它不起作用。
if(descBloque->BaseAddrLow + descBloque->LengthLow > ++descBloque->BaseAddrLow)
EDIT3:我已根据Michael Walz用户的请求添加了该功能的代码。
答案 0 :(得分:2)
当使用 postfix 增量时:操作数descBloque++->BaseAddrLow
返回前一个数组元素的BaseAddrLow
,但会增加descBloque
的值,所以它现在指向下一个要素。这个更新的指针实际上用在等式descBloque->BaseAddrLow + descBloque->LengthLow
的左侧。
当使用前缀增量时:字段BaseAddrLow
的值实际上是递增的,因为前缀增量的优先级低于成员选择(请参阅http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm)。
所以在这两种情况下你都没有得到你想要的东西。您需要执行以下操作:
if(descBloque->BaseAddrLow + descBloque->LengthLow > (descBloque + 1)->BaseAddrLow)
//THERE IS OVERLAPS!! :(