c - 在 C 中将多维数组作为参数传递给函数

标签 c multidimensional-array cs50

我目前正在做 CS50 问题集 3 中的十五个练习。但是,我一直在弄清楚将多维数组作为参数传递给函数的语法。例如,以下代码(打印出数组中的一些数字)可以编译并运行:

#include <stdio.h>

void func(int array[], int size);

int main()
{
    int size = 3;
    int array[3] = {1,2,3};
    func(array,size);
    printf("Done\n");
}

void func(int array[], int size)
{
    printf("%i %i %i\n", array[0],array[1], array[2]);
}

但这不是:

#include <stdio.h>

void func(int array[][], int size);

int main()
{
    int size = 3;
    int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    func(array,size);
    printf("Done");
}

void func(int array[][], int size)
{
    printf("%i %i %i\n", array[0][0],array[1][1], array[2][2]);
}

这是 clang 提供的错误:

test.c:3:20: error: array has incomplete element type 'int []'
void func(int array[][], int size);
                   ^
test.c:13:20: error: array has incomplete element type 'int []'
void func(int array[][], int size)

任何人都可以向我解释我的语法有什么问题吗?我不太明白 clang 给我的错误信息。

最佳答案

函数 func() 需要一个指向 int 的指针,但您传递的是一个指向数组的指针。因此,错误。 这是因为当您将数组传递给函数时,它会转换为指向其第一个元素的指针。

您可以更改函数原型(prototype)和定义以接收指向数组的指针:

void func(int (*array)[3], int size);

int main()
{
    int size = 3;
    int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    func(array,size);
    printf("Done");
}

void func(int (*array)[3], int size) {
  ...
}

请注意,您的数组初始化为 3x3 大小。所以数组大小至少要 3x3。


C99 允许您传递维度。所以你也可以这样写:

void func(int x, int y, int a[x][y]);

int main()
{
    int size = 3;
    int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    func(3, 3, array);
    printf("Done");
}

void func(int x, int y, int array[x][y])
{
    printf("%i %i %i\n", array[0][0],array[1][1], array[2][2]);
}

关于c - 在 C 中将多维数组作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34765495/

相关文章:

c - 如何使用 EOF 运行 C 中的文本文件?

python - 交换多维 Python 列表的轴

check50 说 CS50 过滤器-更多边缘不正确吗?

c - 迭代所有可能的字母组合

c - in_addr_t 到字符串

c - 定义函数并传递结构值

javascript - 谷歌表格: Return Multi Dimensional Array (JavaScript)

CS50 pset3 — 十五人游戏

c - 如何知道字符串指针在重新分配后是否真的变小了?

powershell - 使用ForEach-Object遍历2D数组的每一行