2015-08-22 41 views
2

我有這個功能無符號字符數組指針參數不相容

unsigned char NCN_System_upload(unsigned char *data, unsigned char len); 

我有一個數組定義爲這樣:

unsigned char data[3]; 

我使用的函數,如下所示:

NCN_System_upload(&data, 3); 

但是,我收到以下錯誤:

argument of type unsigned char (*)[3] is incompatible with parameter of type unsigned char*

爲什麼不工作?

+1

數組自然衰變爲指針,所以不需要address-of運算符。 –

回答

3

該數組的名稱已經(可隱式轉換)爲指向其開始的指針。因此,你應該這樣做:

NCN_System_upload(data, 3); 
+0

我知道我超級笨。謝謝! – user2741466

+2

官方措辭將*陣列的名稱已經**衰變**爲指針... *。數組並不總是與指針相同。 –

+3

實際上,「衰變」也是一種非正式的描述(儘管很多人似乎都使用這種描述)。標準中的描述 - 銘記該標準的目的是作爲權威性規範 - 是「NT的一個左值或右值陣列」或「T的未知界限數組」可以轉換爲「指向T的指針」類型的右值。結果是指向數組的第一個元素的指針。「這是一種描述隱式轉換的冗長方式。標準中甚至沒有出現「衰變」(或變體)這個詞。 – Peter