调用使用指针接收数组的函数

标签 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;

    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/

相关文章:

c - 添加到 FLT_MAX 中导致溢出的最小数字

java - 二维数组帮助

c - C 中可疑的指针到指针转换(面积太小)

c++ - 在 CodeBlocks 中查看语言 (C/C++) 引用/文档

c - 交换指针而不是 memcpy

c - 如果 a 是整数数组, &a[i] 和 &a[i-1]+sizeof(int) 是否相同

python - 是否有一个 numpy 函数可以让你指定开始、步骤和数字?

c++ - 返回对未定义指针的引用

c - ANSI C : Passing array by value generates weird error I can not solve

c - 如何检查内存泄漏