C通过引用或通过值将结构数组传递给函数

art*_*sol 4 c struct pass-by-reference pass-by-value

我在C中有一个函数,它接受一个结构数组作为参数:

int load_ini_parms(char * ini_file,
                   struct test_object s[],
                   int num,
                   struct lwm2m_object * l)
Run Code Online (Sandbox Code Playgroud)

我的问题是,将指针传递给结构数组是否会更好?有什么优点或缺点?

眠りネ*_*ネロク 6

它没有任何区别,因为将数组作为函数参数传递衰减为指针.

功能

int load_ini_parms(char *ini_file, struct test_object s[], int num, struct lwm2m_object *l)
Run Code Online (Sandbox Code Playgroud)

相当于

int load_ini_parms(char *ini_file, struct test_object *s, int num, struct lwm2m_object *l)
Run Code Online (Sandbox Code Playgroud)

在两种情况下都丢失了关于阵列大小的信息.


Jim*_*myB 5

与这里其他人的说法相反,我说它确实对“更好的编程实践”产生了影响:

将参数声明为数组向函数的用户表明您期望的是一个数组

如果您只声明一个指针,这不会告诉任何人您需要单个元素还是可能多个元素。

因此,我更喜欢用于单元素参数(例如“输出”参数)的指针和用于(可能)多个元素的数组。