回答
傳遞數組中C.
使用指針通過從T[]
的隱式轉換完成,因爲陣列可以衰變到指針T*
,我們將指針傳遞給參照陣列的功能。
收件像
void sendCommand(uint8_t* Cmd) {
...
}
功能並調用它像
sendCommand(SyncCmd);
然而,注意:sizeof(Cmd)
產生了尺寸指針,而不是整個陣列 ,當在sendCommand
內使用時。因此,您需要明確傳遞大小。見Linus Torvalds的this在這件事上聽到一些粗暴的話。
注意,作爲參數使用時uint8_t[]
,uint8_t*
,uint8_t[42]
,和朋友都是等效的。也就是說,這些都是等效的:
void foo1(uint8_t*);
void foo2(uint8_t[]);
void foo3(uint8_t[42]);
感謝@Olaf爲您的網站的貢獻。
'uint8_t cmd []'也很好。更清楚的是,它被用作內部數組 - 自我記錄代碼。 – Olaf
@奧拉夫嗯,那是你的看法。當通過周圍的代碼閱讀時,指針引用數組的事實也應該是顯而易見的。另外,如果某人真的只傳遞了一個元素作爲大小爲1的'cmd'?我更喜歡'uint8_t *'。但是我會提到他們的等同性,是的。 [Linus在這方面和內核方面也有發言權](https://lkml.org/lkml/2015/9/3/499),只有在你感興趣的時候。 – Downvoter
我現在讀了Linus咆哮。我完全同意他說,人們應該學習和認識C.但這意味着他們意識到正式的數組參數轉換。他們已經必須知道實際的數組參數衰減到指針,所以格式參數衰減也應該清楚。如果你依賴於一個特定的數組參數大小,你必須通過這個大小(也許主要問題是'[]'語法)。作爲常數或VLA。函數頭應該記錄參數()和例如。 Doxygen評論。要求閱讀代碼來理解接口是不好的 – Olaf
- 1. Ç - 傳遞一個字符串數組作爲函數參數
- 2. 傳遞函數數組作爲參數
- 3. 將函數數組作爲參數傳遞給函數
- 4. 傳遞數組作爲參數的數組的函數
- 5. 傳遞函數作爲參數傳遞給另一個函數
- 6. 點作爲函數的參數ç
- 7. Ç傳遞指針函數
- 8. 當函數作爲參數傳遞時,參數如何傳遞給該函數?
- 9. 傳遞函數的參數作爲參數傳遞給另一個函數
- 10. 在C++中將函數參數作爲函數參數傳遞
- 11. 傳遞函數作爲python參數
- 12. 傳遞id作爲函數的參數
- 13. lambda函數作爲參數傳遞
- 14. 傳遞函數作爲參數用Clojure
- 15. 將java函數作爲參數傳遞
- 16. PL/SQL傳遞函數作爲參數
- 17. 傳遞函數作爲參數在HAXE
- 18. Javascript:傳遞函數作爲參數
- 19. 傳遞函數作爲參數
- 20. GLib HashTable傳遞函數作爲參數
- 21. 將函數作爲參數傳遞
- 22. 函數作爲參數傳遞
- 23. 傳遞函數作爲參數
- 24. 作爲參數傳遞一個函數?
- 25. 傳遞$作爲函數參數(jQuery的)
- 26. 如何傳遞函數作爲參數?
- 27. SystemVerilog傳遞函數作爲參數
- 28. 傳遞函數作爲參數
- 29. 傳遞函數作爲參數pthread_once
- 30. 傳遞javascript函數作爲參數
您不能向C中的函數傳遞數組或從C中的函數傳遞數組,但可以將指針傳遞給它的第一個元素。 – Olaf