2012-04-17 83 views
1

我穿過下面的代碼行傳來:在memcmp我們可以使用數組而不是指針

   memcmp(mac, (char []){0x01,0x00,0x5E}, 3) 

也許它會工作;以上述方式編寫memcmp是否正常?謝謝。

+3

如果你可以假設C99(或者至少是gcc),那就可以。不要嘗試使用C89編譯器。 (我還沒有嘗試過,但我懷疑這是否適用於MSVC。) – 2012-04-17 09:20:08

回答

2

是的,它是正常的。要以這種匿名方式聲明數組,被稱爲「複合文字」。它是一種以C99標準引入的功能,並且可以與遵循該標準的所有編譯器一起使用。它不適用於像Visual C++這樣的非標準編譯器。

但是,您應該考慮將其聲明爲const char,這會更加正確,並且可能會導致更好的優化,因爲const可能會使編譯器/鏈接器更容易將數組置於靜態ROM而不是堆棧。

+0

不僅僅更簡單;編譯器只允許創建具有靜態存儲持續時間的複合文字,如果它們是const限定的。即使它可以告訴數據是不變的,只要非const限定,複合文字就需要有一個對函數調用唯一的地址(例如在遞歸/重入情況下很重要)。 – 2012-04-17 13:18:23

5

是的,它會工作,沒有任何問題,這是一樣的:

char arr[] = {0x01,0x00,0x5E}; 
memcmp(mac, arr, 3); 
0

在這種情況下,數組並沒有真正的從一個指針任何方面的差異(關鍵字「陣列到指針衰變」)。

由於C允許您以這種方式定義臨時數組,因此您可以使用這種表示法來測試編譯時已知的一堆值在您的mac數組中。

相關問題