好的,所以我像这样调用函数 fill_arrays:
fill_arrays(&data1, &data2, &size1, &size2);
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
在 input_data 函数中,我想为数组分配一些数字:
void input_data(int **data, int size, int index){
*data[5] = 5;
}
Run Code Online (Sandbox Code Playgroud)
问题是,我完全迷失了指针......也许你能告诉我我应该如何调用函数 input_data 以便能够为数据数组分配一些数字?
假设input_data应将所有数组值设置为已知值,您可以编写
void input_data(int *data, int size, int value){
for (int i=0; i<size; i++) {
data[i] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
像这样称呼这个
input_data(*data1, *size1, 5); // set all elements of data1 to 5
Run Code Online (Sandbox Code Playgroud)
这里的关键点是您可以用来(*data1)[index]访问特定的数组元素,并且可以将数组作为int*参数传递。
我在做家庭作业时偶然发现了这个问题,答案并没有让我完全满意,所以我会努力改进它。
下面是一个小程序,它会建立一个用户自定义大小的数组,任意填充,并打印出来。
#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;
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助任何第一次学习 C 的人,或者像我一样远离久经考验的真正语言多年后重新学习 C 的人。