簡體   English   中英

避免在 C++ 中的 if 語句中遞增

[英]Avoiding incrementing in if statement in C++

我想避免在 if 語句中遞增和遞減,因為在檢查條件時以下代碼中存在分段錯誤錯誤(例如,如果我們從 p = 1 和 k = 1 開始):

if (((heights[k--][p--] < heights[k][p]) || (heights[k--][p--] == heights[k][p])) &&
        ((heights[k--][p++] < heights[k][p]) || (heights[k--][p++] == heights[k][p])) &&
        ((heights[k++][p--] < heights[k][p]) || (heights[k++][p--] == heights[k][p])) &&
        ((heights[k++][p++] < heights[k][p]) || (heights[k++][p++] == heights[k][p]))){
                    width[k][p] = 3;
    }

例如,第二次檢查失敗,k = -1。 我想在 if 語句中檢查二維數組heights的相鄰元素,然后運行一些邏輯以防萬一。

我如何優化它並通常重寫它以使其看起來(和工作)更好? 我沒有找到任何關於它的信息。

正如其他人所指出的,將所有“k”和“p”變量的“k--”替換為“k-1”,將“k++”替換為“k+1”可以解決分段錯誤。 'k+1' 是對 'k' 之后的下一個數組索引的引用,而 'k++' 在使用后會增加 'k' 的值。 避免將表達式用作 arguments 也是一種很好的編程習慣。

https://en.cppreference.com/w/cpp/language/operator_incdec

要清理代碼,您還可以通過將 '<' 替換為 '<=' 來簡化邏輯 OR。

if ((heights[k-1][p-1] <= heights[k][p]) &&
    (heights[k-1][p+1] <= heights[k][p]) &&
    (heights[k+1][p-1] <= heights[k][p]) &&
    (heights[k+1][p+1] <= heights[k][p])){
        width[k][p] = 3;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM