[英]Passing array to a function in C to store data
我是C语言的新手,在这里,我试图从文件中读取整数(由空格分隔)并将它们存储在名为array
。
最初,我将array
设置为NULL
,然后将其传递给read_file
函数。 在read_file
一切正常。 但是,当从堆栈中弹出read_file
时, array
仍指向NULL
而不是read_file
加载的数据。 我究竟做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int read_file(FILE *file, int *input_array);
FILE *file;
int main(){
char *pathname = " numbers.txt";
if(fopen_s(&file, pathname, "r"))
puts("File could not be opened.");
int *array = NULL;
int array_size = read_file(file, array);
int i;
for(i = 0; i < array_size; i++){
printf("%d\n", array[i]);
}
fclose(file);
std::cin.ignore();
return 0;
}
int read_file(FILE *file, int *input_array){
int array_size = 10;
input_array = (int *) malloc(array_size * sizeof(int));
int i;
for(i = 0; !feof(file) && i < array_size; i++){
fscanf_s(file, "%d", &input_array[i]);
//printf("%d\n", input_array[i]);
}
return i;
}
变量input_array
通过值传递给函数。 因此,实际参数array
不会更改其值。 为了更改array
的值,您将需要以类似于以下方式的方式将引用(指针)传递给它:
int read_file(FILE *file, int **input_array){ ...
然后在函数内部相应地更改对其的访问。
但是更好的主意可能是将预分配的数组传递给函数,以使函数只会更改其内容 ,因此签名将保持不变。
input_array
是input_array
的本地read_file
,因此当函数返回时,为它分配值的事实会丢失。 如果要为变量array
分配值,则必须将指向该值的指针传递给函数。 即:
array_size = read_file(file, &array);
. . .
int read_file(FILE *file, int **input_array) {
. . .
*input_array = malloc(array_size * sizeof(int));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.