-2
我發現這個代碼的Arduino庫加號運算符對數組做什麼?
u8 buf[6];
Host2SCS(buf+0, buf+1, Position);
Host2SCS(buf+2, buf+3, Time);
Host2SCS(buf+4, buf+5, Speed);
加符不與陣列什麼的呢?
我發現這個代碼的Arduino庫加號運算符對數組做什麼?
u8 buf[6];
Host2SCS(buf+0, buf+1, Position);
Host2SCS(buf+2, buf+3, Time);
Host2SCS(buf+4, buf+5, Speed);
加符不與陣列什麼的呢?
在該表達式中,buf + 1
,其中buf
是一個數組的buf+3
=地址;
buf
隱式轉換爲等於&buf[0]
(的buf
第一元件的地址)這是已知的(意料之中)標準轉換爲「數組指針轉換」,或爲「衰減到一個指針指針」。buf+1
的結果等於&buf[1]
。在您的代碼中,將指針添加到指針所產生的指針傳遞給該函數。你的代碼的更明確的版本將是
u8 buf[6];
Host2SCS(&buf[0], &buf[1], Position);
Host2SCS(&buf[2], &buf[3], Time);
Host2SCS(&buf[4], &buf[5], Speed);
哪種形式是「更好」是一種風格的關注 - 他們在技術上是等價的。
buf
是一個指針(指向一個數組),在這種情況下,+
運算符做指針運算。例如:A的
int A[] = {5, 1, 4, 8};
std::cout << A << std::endl;
std::cout << A+3 << std::endl;
output:
0x7d972ee131c0
0x7d972ee131cc
A+3
這樣=地址+ 3 * sizeof (int)
同樣,BUF + 3 * sizeof (u8)
當使用指針時,數組名稱衰減爲指向其第一個元素的指針。 – HolyBlackCat