我目前正在開發一個視覺系統,該系統通過我用 C/C 撰寫的計算機應用程式進行控制/監控。如果您想知道為什么我用 C/C 撰寫,基本上是因為我的視覺傳感器 (LMI Gocator 2490) 具有用 C 開發的函式,并且我正在使用 opencv (C ) 來分析其資料。長話短說,我有 1 門資訊學課程,它是用 C 語言撰寫的,但我不擅長 C 。
我想知道是否有一種簡單的方法,例如使用或撰寫函式來檢索回圈回到其開頭的陣列索引,而不是嘗試讀取不屬于陣列一部分的索引,這也會導致記憶體訪問沖突。例如:
long a[4];
for (size_t i = 0; i < sizeof(a) / sizeof(long); i )
{
if (a[i] && a[i 1]) //Define some conditions regarding a[i] and a[i 1]
{
//Process code
}
}
所以在這里,很容易理解,當我達到 3 的值時,我會遇到記憶體訪問沖突。我想做的是有某種機制,它會回傳一個“回圈”回到開始的陣列索引。在上面顯示的情況下,i 1,其中 i = 3 將是 0。如果我將 i 2 放入,我希望得到 1,依此類推...
這可能很愚蠢,但它可以讓我省去在 for 回圈內的某些 switch/case 陳述句中撰寫 4 次相同邏輯的痛苦,然后我需要在除錯時對所有 4 個邏輯進行修改......謝謝!
uj5u.com熱心網友回復:
到達上限時使用模數包裹
long a[4];
size_t sz = sizeof(a) / sizeof(long);
for (size_t i = 0; i < sz; i )
{
if (a[i] && a[(i 1) % sz]) //Define some conditions regarding a[i] and a[i 1]
{
//Process code
}
}
不過,可能不是超級最佳的性能(好吧,值為 4,編譯器可以用模數換取掩碼,所以沒問題)。
在一般情況下,避免除法,并檢查是否溢位,如果是,則選擇 0
for (size_t i = 0; i < sz; i )
{
size_t j = i < sz-1 ? i 1 : 0;
if (a[i] && a[j]) //Define some conditions regarding a[i] and a[i 1]
{
//Process code
}
}
(代碼將在 C 和 C 中作業)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362944.html
