所以我有这个:
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”二维数组:
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]);
}
}
}
它不起作用,可能是因为我使用了错误的指针。如何使用 malloc,然后调用函数并通过执行 pref[i][j] 接收二维数组中的值? (请注意,我不想做类似 scanf(..., &pref+i) 之类的事情。我需要实际使用该二维数组。
谢谢:)
最佳答案
当你写a[i]
时,它会变成*(a+i)
。也就是说,a[i]
通过a+i
地址访问内存(好吧,它甚至是a+i*sizeof(element)
)。
因此,a[i][j]
表示 *(*(a+i)+j)
。 两次内存访问。为此,您的 a
应该是数组的数组。也就是说,您需要首先malloc
其元素,然后malloc
内存来保存它们。
就您的具体情况而言,我怀疑您是否需要它。您需要的是将其设为一维数组(已经是它了)并以您希望的任何方式从两个索引计算索引。
关于调用使用指针接收数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34828895/