【问题标题】:Setting value of elements from array using function call使用函数调用从数组中设置元素的值
【发布时间】:2014-07-08 12:25:13
【问题描述】:

我有一个需要设置值的数组。应该使用函数调用并通过引用传递元素来完成值设置。

这是减速:

DataRecord  *pDataRecordArray;

这是分配:

pDataRecordArray = (DataRecord*)malloc(sizeof(DataRecord*)*iIgnoreBottomRows);

这是设置函数:

apr_status_t (*get_empty_data_record)(struct W *w,
                                          int                        x, 
                                          struct _DataRecord         **ppDataRecord, <---relevant parameter
                                          size_t                     y,
                                          size_t                     z);

这就是我计划发送数据但给出错误的方式:

base_control.get_empty_data_record(w, 0, &pDataRecordArray[0], 0, 0);

这当然行不通,但我似乎找不到设置元素的方法。

所有其他参数都无关紧要,因此以 XYZ 命名。

谢谢

【问题讨论】:

  • 请不要强制转换 malloc 返回的 void 指针。我认识的大多数人都同意malloc 最清晰的语法(并且最不容易出错)是:type *varName = malloc(10*sizeof *varName);,因为您可以像一句话一样阅读它:malloc 十倍于类型“varName”指向的内存大小
  • 指向 T 类型的指针数组的类型为 T**,而不是 T*。
  • “所有其他参数都无关紧要,因此使用 XYZ 命名。”你太模糊了,以至于你的问题描述没有用。例如,我认为DataRecord 的类型是struct _DataRecord *,但我们不知道。 get_empty_data_record 的目的是什么?它是否在您的数据记录列表中设置了一个值?有一件事是肯定的:它不会“得到”任何东西。它返回一个状态码。为什么要提供函数原型作为函数指针?为什么该指针是结构的一部分?有很多事情是可疑的,不清楚你真正的问题是什么。
  • 哦,如果您不想显示部分代码 - 结构或参数的内容被认为是不必要的,请剥离您的代码并提供一个小的、独立的示例来重现您的错误。

标签: c arrays reference pass-by-reference


【解决方案1】:

如果要在数组中设置元素,请尝试这样调用函数

base_control.get_empty_data_record(w, 0, &pDataRecordArray, 0, 0);

【讨论】:

  • 在这种情况下,数组名将衰减为指向其第一个元素的指针,传递&amp;pDataRecordArray,然后将传递一个指向指针的指针。 (参照标准:C11 6.3.2.1 左值、数组和函数指示符)
  • 谢谢 Elias Van Ootegem。我已经编辑了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2018-09-01
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多