【问题标题】:Filling array in C by using functions使用函数填充C中的数组
【发布时间】:2013-04-16 15:35:43
【问题描述】:

好的,所以我这样调用函数 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 以便能够将一些数字分配给数据数组?

【问题讨论】:

  • 总体目标是什么?程序应该做什么?
  • 您需要将sizeof(int * ) 替换为sizeof(int) 并将data1 传递给input_data 而不是引用&data
  • 你在看哪本书?
  • 函数fill_arrays() 的预期目标是 (a) 确定要填充的数组的大小,(b) 为数组大小分配空间,(c) 填充分配的数组,以及 ( d) 将数组作为输出参数返回每个数组的结果大小?这就是fill_arrays() 的原型看起来你想要或希望的样子。是这样吗?

标签: c arrays function pointers


【解决方案1】:

假设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* 参数传递。

【讨论】:

  • 如果我使用带有 * 的数组调用函数,这给了我错误:“参数从整数中生成指针而没有强制转换 [-Wint-conversion]”。相反,我这样调用函数: input_data(data1, *size1, 5);
【解决方案2】:

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

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

#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 语言的人。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2020-09-11
      相关资源
      最近更新 更多