传递具有未知大小的C数组来运行

问题描述 投票:-3回答:3

在C中,如何将未知大小的数组传递给函数(通过引用)?

数组的大小仅在函数内部确定。

c arrays
3个回答
1
投票

你必须在函数内部使用malloc数组。然后:

[给出int数组的例子;相应调整]

(i)返回指向它的指针:

int* f(void) {
    int *array;
    .
    .
    .
    array = malloc(length * sizeof int);
    .
    .
    .
    return array;
}

要么

(ii)将其存储在调用者传递的指针内

void f(int **array) { // yes, double pointer
    .
    .
    .
    *array = malloc(length * sizeof int); // here malloc's your array and store it in *array
    .
    .
    .
}

完成后,不要忘记free这个数组。

编辑:被调用者将是:

(一世)

int *array; // can't use the array yet
.
.
.
array = f(); // now it's available for use
.
.
.
free(array); // no longer available

(二)

int *array; // can't use the array yet
.
.
.
f(&array); // now it's available for use
.
.
.
free(array); // no longer available

4
投票

如果数组是空终止字符数组,那么您可以使用strlen来计算该字符数组的长度。否则,您需要使用分隔符来知道数组的末尾,并使用循环来定位分隔符。

注意:C中没有通过引用传递。


2
投票

您必须传递数组的起始地址以及参数的数量,如下所示。

void f (int* array, int n) {
     int i, x;
     for (i = 0; i < n; i++) {
          x = array[i];  // use x
          ...
     }
     ...
 }

替代方案:您必须就标准EOD(数据结束)标记达成一致。在这种情况下,您可能不会显式传递数组的长度,而是依赖该值来检查数组的结尾。一个例子是0终止的字符串(C的char数组)。

#define END_OF_ARRAY -1

void f (int* array) {
     int i;
     while (array[i] != END_OF_ARRAY) {
          // use array[i]
          ...
          i++;
     }
     ...
 }
© www.soinside.com 2019 - 2024. All rights reserved.