4

好的,所以我这样调用函数 fill_arrays:

fill_arrays(&data1, &data2, &size1, &size2);

fill_arrays 看起来像这样:

void fill_arrays(int **data1, int **data2, int *size1, int *size2){
   *size1 = get_size(*size1, 1);
   *size2 = get_size(*size2, 2);
   *data1 = malloc(*size1 * sizeof(int *));
   *data2 = malloc(*size2 * sizeof(int *));
   input_data(&data1, *size1, 1);
}

在 input_data 函数中,我想为数组分配一些数字:

void input_data(int **data, int size, int index){
   *data[5] = 5;
}

问题是,我完全迷失了指针......也许你可以告诉我应该如何调用函数 input_data 以便能够将一些数字分配给数据数组?

4

3 回答 3

5

假设input_data应该将所有数组值设置为已知值,您可以编写

void input_data(int *data, int size, int value){
    for (int i=0; i<size; i++) {
        data[i] = value;
    }
}

像这样称呼

input_data(*data1, *size1, 5); // set all elements of data1 to 5

这里的关键点是您可以(*data1)[index]用来访问特定的数组元素,并且可以将您的数组作为int*参数传递。

于 2013-04-16T15:39:19.677 回答
5

我在做家庭作业时偶然发现了这个问题,答案并没有让我完全满意,所以我会努力改进它。

这是一个小程序,它将建立一个用户定义大小的数组,任意填充,然后打印出来。

#include <stdio.h>
#include <stdlib.h>

void fill_array(int *array, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        // fill array like [1, 2, 3, 4...]
        array[i] = i+1;
    }
}

void print_array(int *array, int n)
{
    int i;
    printf("[");
    for (i = 0; i < n; i++)
    {
        if (i == (n-1))
            printf("%d]\n", array[i]);
        else
            printf("%d, ", array[i]);
    }
}

int main()
{
    int n;
    printf("Please enter a size for your array>");
    scanf("%d", &n);

    // dynamically allocate memory for integer array of size n
    array = (int*) malloc (n * (sizeof(int)));

    fill_array(array, n);
    print_array(array, n);

    return 0;
}

我希望这可以帮助任何第一次学习 C 的人,或者像我这样在远离久经考验的真实语言多年后重新学习 C 的人。

于 2015-08-28T20:22:10.130 回答
0

看来您还应该添加int *array = NULL以使其正常工作。

于 2018-01-12T14:30:32.587 回答