【问题标题】:C pass array of structs by reference or by value to a functionC通过引用或值将结构数组传递给函数
【发布时间】:2018-01-18 10:30:20
【问题描述】:

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

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

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

【问题讨论】:

  • 通过使用struct test_object s[] 作为参数,编译器实际上将其视为struct test_object *s。所以你已经在传递一个指针(指向第一个元素)。
  • 从技术上讲,将数组作为参数传递等于传递指向其第一个元素的指针,因此,如果将指针传递给数组,则只需将指针传递给 struct 指针,即在这里有时可能有用但没必要
  • 使用 C99+ 和 vla 参数。
  • @artic sol 不清楚你在问什么。
  • @AnttiHaapala 注意 VLA 在 C11 中是可选的

标签: c struct pass-by-reference pass-by-value


【解决方案1】:

这没有任何区别,因为将数组作为函数参数衰减变成指针

功能

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)

在这两种情况下,有关数组大小的信息都会丢失。

【讨论】:

    【解决方案2】:

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

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

    如果你只声明一个指针,这不会告诉任何人你期望一个元素还是多个元素。

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

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 2019-10-30
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      相关资源
      最近更新 更多