2017-08-10 107 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

感谢,我没有想到这一点。 –