【问题标题】:pass array of specific size to a function in C将特定大小的数组传递给 C 中的函数
【发布时间】:2015-06-26 13:21:09
【问题描述】:

我在一个程序中有一个大小为 4096 的数组,在程序的某个阶段之后,不再需要这个数组。同时,我从应用程序中获得了不同的测量数据集。我没有创建这么多数组,而是重用相同的数组来为应用程序节省内存空间。我将较小尺寸的不同测量数据(例如:64)存储在上述数组中。

示例: double bigArray[4096] 的目的已经完成,这个数组在程序的后面部分被重用来存储其他测量值。

  • 大小为 64 的测量数据 1 存储在 bigArray[0 到 63] 中
  • 大小为 64 的测量数据 2 存储在 bigArray[64 到 127] 中
  • 大小为 64 的测量数据 3 存储在 bigArray[128 到 191] 中

现在我需要将值传递给其他函数,如下所示:

void main()
{
  xyzFunction(bigArray[0:63], bigArray[64:127], bigArray[128:191]);
}

void xyzFunction(double *data1, double *data2, double *data3)
{
  ...calculations involving data1, data2, data3...
}

data1 应该只指向前 64 个数组元素,依此类推。我尝试过,但无法将部分数据从 bigArray 完全传递给函数。

我们非常感谢您为实现这一目标提供的任何帮助。 提前致谢。

【问题讨论】:

  • 你不能只指向前 64 个元素,因为指针只指向 one 元素,但你可以选择它指向的元素:(&bigArray[0], &bigArray[64], &bigArray[128]) .

标签: c arrays function


【解决方案1】:

你需要传递一个size参数,像这样

void xyzFunction(double *data1, size_t data1size, 
    double *data2, size_t data2size, double *data3, size_t data3size)
{
  /* ...calculations involving data1, data2, data3... */
}

就这样称呼它

xyzFunction(bigArray, 64, bigArray + 64, 64, bigArray + 128, 64);

哦,顺便说一句,这相当于@molbdnilo的评论,只是你应该传递大小,除非它总是相同。

【讨论】:

  • 或等效的xyzFunction(&bigArray[0], 64, &bigArray [64], 64, &bigArray[128], 64);
  • @user3528438 是的,这就是为什么我添加了对this comment 的引用。
  • 没有。在评论中只有地址被传递。
  • 是的,在对评论的引用中,我说除了...
猜你喜欢
  • 2011-03-04
  • 2017-07-26
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多