C 调用使用指针接收数组的函数
所以我有这个:C 调用使用指针接收数组的函数,c,arrays,pointers,C,Arrays,Pointers,所以我有这个: int main() { int workers; printf("How many workers are there?\n"); scanf("%d", &workers); printf("What are their preferences?\n"); int *pref = malloc(workers * sizeof(int)); if (pref == NULL) return -1;
int main()
{
int workers;
printf("How many workers are there?\n");
scanf("%d", &workers);
printf("What are their preferences?\n");
int *pref = malloc(workers * sizeof(int));
if (pref == NULL)
return -1;
fillPreferences(pref, workers);
return 0;
}
现在,我想在此函数中填充“pref”2d数组:
void fillPreferences(int pref[][], int size)
{
for (int i=0;i<size;i++)
{
for (int j=0;j<size;j++)
{
scanf(" %d", &pref[i][j]);
}
}
}
void-fillPreferences(int-pref[][],int-size)
{
对于(int i=0;i而言,您的pref数组是1D的,因此可以通过以下方式进行设置:
#include <stdio.h>
#include <stdlib.h>
void fillPreferences(int **pref, int size)
{
int prefNum=0;
for (int i=0;i<size;i++)
{
puts("Number of preferences");
scanf("%d",&prefNum);
pref[i]=malloc(sizeof(int)*prefNum);
puts("Enter preferences");
for(int j=0;j<prefNum;j++){
scanf(" %d", &pref[i][j]);
}
}
}
int main()
{
int workers;
printf("How many workers are there?\n");
scanf("%d", &workers);
printf("What are their preferences?\n");
int **pref = malloc(workers * sizeof(int *));
if (pref == NULL)
return -1;
fillPreferences(pref, workers);
// Show values
printf("%d %d %d",pref[0][0],pref[1][0],pref[2][0]);
return 0;
}
#包括
#包括
void fillPreferences(整数**pref,整数大小)
{
int prefNum=0;
对于(inti=0;i当你写a[i]
时,它变成*(a+i)
。也就是说,a[i]
通过a+i
地址访问内存(它是a+i*sizeof(element)
偶数)
因此,a[i][j]
意味着*(*(a+i)+j)
两次内存访问。要实现这一点,您的a
应该是一个数组数组。也就是说,您需要先malloc
它的元素,然后malloc
一个内存来容纳它们
在您的特殊情况下,我怀疑您是否需要它。您需要的是将其设置为1D数组(已经是了),并根据您的两个索引以任何方式计算索引。您为1D数组分配内存,但您拥有的函数设计为接受2D数组并填充它(尽管函数定义不正确,无法编译)
更正代码:
#include <stdio.h>
#include <stdlib.h>
void fillPreferences(int** pref, int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
scanf("%d", &pref[i][j]);
}
}
}
int main()
{
int workers;
printf("How many workers are there?\n");
scanf("%d", &workers);
printf("What are their preferences?\n");
int **pref = malloc(workers * sizeof(int*));
if (pref == NULL)
return -1;
for(int i = 0; i < workers; i++)
{
pref[i] = malloc(workers * sizeof(int));
if(pref[i] == NULL)
{
for(int j = 0; j < i; j++)
free(pref[j]);
free(pref);
return -1;
}
fillPreferences(pref, workers);
/* Don't forget to `free` everything after its use! */
return 0;
}
#包括
#包括
void fillPreferences(整数**pref,整数大小)
{
对于(int i=0;i
没有2D数组。也没有指针数组或类似的数组。而且函数不接受“指向数组的指针”。我做错了什么?我该如何修复它?void fillPreferences(int pref[],int size){for(int I=0;I首先,创建一个2D数组。我需要接收如下输入:{1 2 3}{2 4 3}{5 2 4}-2D数组。非常感谢!!我有没有办法只使用void fillPreferences(int[]pref,int size)来完成你在那里做的事情?因为我被要求使用这个声明。。