【发布时间】: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