gpt4 book ai didi

c - 数组作为结构的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:14 25 4
gpt4 key购买 nike

我是 C 的新手,在使用数组作为结构的一部分时遇到了一些麻烦。我有一个结构定义如下:

typedef struct
{
int row;
int col;
int * puzzle[5][5]
} data;

稍后在函数中,我尝试按如下方式使用此结构:

void foo(int grid[5][5])
{
data *puz = (data *)malloc(sizeof(data));
puz->row = 3;
puz->col = 2;
puz->puzzle = grid; // causes an error
}

最后一条语句产生错误“赋值给具有数组类型的表达式”。我知道这与等号和数组数据结构有关,但我不确定如何解决这个问题。任何帮助是极大的赞赏。谢谢。

最佳答案

这...

    int * puzzle[5][5]

... 将 puzzle 声明为一个由 5 个数组组成的数组,每个数组有 5 个指向 int 的指针。通俗地说,我们更经常称这样的东西为 5 x 5 数组,但您应该了解的关键是底层标量元素类型是指针类型。这与函数 foo 的参数的标量元素类型 (int) 不匹配,无论如何它都不可能是您想要的。 (另请注意,您的代码在该成员声明后省略了所需的分号。)

似乎应该将结构成员声明为 ...

int puzzle[5][5];

... 即 int 的二维数组。 C 没有整数组赋值,所以在那种情况下,您需要一种不同的方法来将函数参数复制到新结构中。您可以编写一组嵌套循环,但使用 memcpy() 更直接:

memcpy(&puz->puzzle, grid, sizeof(puz->puzzle));

万一您希望您的结构包含指向数组的指针,那么您可以将其声明为

int (*puzzle)[5];

int (*puzzle)[5][5];

甚至

int *puzzle;

您选择的哪些会影响您分配给成员的方式以及访问 int 数组元素的方式。由于我认为这些都不是您真正想要的,所以我将详细信息留作练习。

关于c - 数组作为结构的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com