接收指向结构的二维数组的指针的 C 函数

标签 c function pointers struct declaration

<分区>

我有这个结构

typedef struct _cood{
    int x, y;
}coordirnate;

在主代码中,我有一个coordinate foo[3][3]。我需要将此 foo 作为指向函数 scanCood() 的指针传递。

void scanCood(coordinates *foo[3][3]);
void printCood(coordinates foo[3][3]);

int main(int argc, char** argv)
{
    coordinate foo[3][3];

    printf("WRITE YOUR NUMBERS:\n");
    scanCood(&foo);

    printf("PRINTING YOUR NUMBERS\n\n");
    printCood(foo);

    return (0);
}

scanCood函数是这样的:

void scanCood(coordinate *foo[3][3]){

    int i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {

            scanf("%d", &foo[i][j]->x);
            scanf("%d", &foo[i][j]->y);

        }
    }
}

使用 printCood 打印很容易,我没有遇到任何问题,但在我输入 2 个数字后,程序核心转储到 scanCood 上。

编译器给出这些警告,但不妨碍编译:

Compilation output

我需要一些帮助,了解如何使用这个指针实现这个功能。

最佳答案

函数声明错误。

我认为你的意思如下

void scanCood( coordinate ( *foo )[3], size_t n )
{
    size_t i, j;
    for (i = 0; i < n; i++ ) 
    {
        for (j = 0; j < 3; j++) 
        {
            scanf("%d", &foo[i][j].x);
            scanf("%d", &foo[i][j].y);
        }
    }
}

函数可以这样调用

scanCood( foo, 3 );

由你参数声明使用

coordinate * foo[3][3]

表示坐标*类型的二维指针数组,调整为以下类型的指针

coordinate * ( *foo )[3]

如果你想传递一个指向数组的指针,那么参数应该这样声明

    coordinate ( * foo )[3][3]

虽然没有必要这样声明参数。

在这种情况下确实调用了函数

scanCood(&foo);

但是函数体应该使用正确的语法重写。 例如

void scanCood( coordinate ( *foo )[3][3] )
{
    size_t i, j;
    for (i = 0; i < n; i++ ) 
    {
        for (j = 0; j < 3; j++) 
        {
            scanf("%d", &( *foo )[i][j].x);
            scanf("%d", &( *foo )[i][j].y);
        }
    }
}

考虑到函数声明中存在拼写错误

void scanCood(coordinates *foo[3][3]);
                        ^
void printCood(coordinates foo[3][3]);
                         ^

关于接收指向结构的二维数组的指针的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730952/

相关文章:

c++ - 在 char 数组中插入整数以在重命名函数中使用它

c - 井字棋 - 转弯 C

Python Argparse 多次使用相同的参数

C - 通过指针从函数获取结构 - 段错误

c - 让 gcc 成为 make 的默认编译器

c - 打开一个正在运行的二进制文件

python - Python中的第一类函数是什么

function - 函数可以在 Go 中实现接口(interface)吗

c++ - 动态转换接口(interface)指针

C:在函数中使用指针访问二维数组