2017-08-10 109 views
2

我用C有一個函數,它接受結構的數組作爲參數:C中傳遞數組通過引用或值的函數

int load_ini_parms(char * ini_file, 
        struct test_object s[], 
        int num, 
        struct lwm2m_object * l) 

我的問題是,會是更好的編程做法傳遞一個指向結構數組的指針?優點或缺點是什麼?

+4

通過使用'struct test_object s []'作爲參數,編譯器實際上將其視爲'struct test_object * s'。所以你已經傳遞了一個指針(第一個元素)。 –

+1

傳遞一個數組作爲參數在技術上等於將一個指針傳遞給它的第一個元素,所以如果你傳遞了一個指向數組的指針,你只需要傳遞一個指向'struct'指針的指針,這可能有時是有用的,但這裏不必要 – Fureeish

+0

使用C99 +和vla參數。 –

回答

3

它不會使任何差別,因爲傳遞數組作爲函數參數衰減成指針

功能

int load_ini_parms(char *ini_file, struct test_object s[], int num, struct lwm2m_object *l) 

相當於

int load_ini_parms(char *ini_file, struct test_object *s, int num, struct lwm2m_object *l) 

的信息有關的數組的大小在兩種情況下都將丟失。

+0

謝謝澄清。 –

3

相反的是別人在這裏說,我說這確實有所作爲,什麼可能是一個「良好的編程習慣」:

聲明參數作爲數組指示功能的用戶認爲你期望的是,陣列

如果你只聲明一個指針,這不會告訴任何人,如果你期望單個元素或可能多個。因此,我更喜歡單元素參數指針(例如「輸出」參數)和(可能)多個元素的數組。

+0

感謝,我沒有想到這一點。 –