繁体   English   中英

指向C中的2D数组的指针

[英]Pointer to 2D array in C

我试图在C中创建一个数独求解器。我试图创建一个函数来解决数独,然后返回网格。

void solve(int *grid){
    //solve sudoku
}

int main(){
    int[][] grid = {
        {5,3,0,0,7,0,0,0,0},
        {6,0,0,1,9,5,0,0,0},
        {0,9,8,0,0,0,0,6,0},
        {8,0,0,0,6,0,0,0,3},
        {4,0,0,8,0,3,0,0,1},
        {7,0,0,0,2,0,0,0,6},
        {0,6,0,0,0,0,2,8,0},
        {0,0,0,4,1,9,0,0,5},
        {0,0,0,0,8,0,0,7,9}
    };
solve(&grid);
}

这似乎不起作用。 它需要一个指针,因为它应该编辑数组而不是副本。为什么?

首先,此数组声明

int[][] grid = {
    {5,3,0,0,7,0,0,0,0},
    {6,0,0,1,9,5,0,0,0},
    {0,9,8,0,0,0,0,6,0},
    {8,0,0,0,6,0,0,0,3},
    {4,0,0,8,0,3,0,0,1},
    {7,0,0,0,2,0,0,0,6},
    {0,6,0,0,0,0,2,8,0},
    {0,0,0,4,1,9,0,0,5},
    {0,0,0,0,8,0,0,7,9}
};

是错的。 您必须在标识符后使用方括号,并至少指定内部尺寸中的元素数量。

#define N 9

//...
int grid[][N]  = {
    {5,3,0,0,7,0,0,0,0},
    {6,0,0,1,9,5,0,0,0},
    {0,9,8,0,0,0,0,6,0},
    {8,0,0,0,6,0,0,0,3},
    {4,0,0,8,0,3,0,0,1},
    {7,0,0,0,2,0,0,0,6},
    {0,6,0,0,0,0,2,8,0},
    {0,0,0,4,1,9,0,0,5},
    {0,0,0,0,8,0,0,7,9}
};

如果您想将数组传递给函数,则可以将函数声明为

void solve( int ( *grid )[N], size_t n );

叫像

solve( grid, N );

请注意,数组没有复制分配运算符,并且可能无法使用指针分配数组标识符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM