在C中,如何将未知大小的数组传递给函数(通过引用)?
数组的大小仅在函数内确定。
答案 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