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

时间:2014-07-07 18:58:19

标签: c arrays

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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++;
     }
     ...
 }

答案 2 :(得分: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