c - 将数组传递给 C 中的函数来存储数据

标签 c arrays function pointers null

我是 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){ ...

然后在函数内相应地更改对其的访问权限。

但更好的想法可能是将预先分配的数组传递给函数,这样函数只会改变其内容,因此签名将保持不变。

关于c - 将数组传递给 C 中的函数来存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928887/

相关文章:

c++ - 打印 float ,保持精度

c - UNIX C编程输入重定向命令

arrays - 复制相同类型的数组

javascript - 在字符串上调用函数(Javascript)

algorithm - 这个伪代码的时间复杂度是多少?

c++ - Windows 如何进行定时 GUI 动画?

c - C语言的扑克牌游戏。请解释花色[4][9]和花色[13][6]?

java - “镜像”二维数组 [Java]

javascript - 通过字符串动态选择一个数组,然后 .map() 在它上面

javascript - parseInt() 和 parseFloat() 的区别