c - C 中的结构指针数组,无效的初始值设定项错误

标签 c arrays pointers struct initialization

这段代码:

extern void *malloc(unsigned int);
struct Box {
    int x, y ,w, h;
};

struct Wall {
    char color[15];
    struct Box *boxes[20];
};

int main(int argc, const char *argv[])
{
    struct Wall *mywall = malloc(sizeof(struct Wall));
    struct Box *myboxes[] = mywall->boxes;
    return 0;
}

在第 14 行给我 invalid initializer 错误。我想做的是获取结构指针数组的副本,它们位于不同的结构中。

最佳答案

哎哟;这里有很多问题。

extern void *malloc(unsigned int);

不要那样做;使用 #include <stdlib.h>因为那是正确的,而你写的通常是不正确的(malloc() 的参数是 size_t ,不一定是 unsigned int ;它可能是 unsigned long 或其他类型)。

struct Box {
    int x, y ,w, h;
};

除了不稳定的空间,struct Box没问题。

struct Wall {
    char color[15];
    struct Box *boxes[20];
};

struct Wall也可以。

int main(int argc, const char *argv[])

您没有使用 argcargv , 所以你最好使用以下的替代声明:

int main(void)

还是原来的代码:

{
    struct Wall *mywall = malloc(sizeof(struct Wall));

这分配但不初始化单个 struct Wall .就其本身而言,它是可以的,但您应该在使用之前检查分配是否成功。您还需要担心分配 struct Box数组元素将指向的项。

    struct Box *myboxes[] = mywall->boxes;

你手头上有一场小灾难。你不能那样复制数组。你还没有检查你有一个数组。忽略错误检查,您会遇到以下情况之一:

    struct Box *myboxes[] = { &mywall->boxes[0], &mywall->boxes[1], ... };

或:

    struct Box **myboxes = &mywall->boxes;

我不相信你会想要第二个版本,因为它更短。

    return 0;

我喜欢看return 0;main() 的末尾,即使 C99 允许您省略它。

}

关于c - C 中的结构指针数组,无效的初始值设定项错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708397/

相关文章:

c - 使用 truss 调试 open() 命令调用

c - 为什么我收到编译错误 "error: conflicting types for ‘ptr’“以下代码? static int val=33; int *ptr;//=&val; ptr=&val;

C、结构体指针的赋值改变了赋值右边的内容

python - 按维度扩展 np.array()

c - 如何在不使用临时节点的情况下在单链表中插入新节点?

c - 使用 calloc 分配二维数组

c++ - 我什么时候使用哪种指针?

c - Qsort() 不适用于结构

困惑 : Dynamic Allocation of 2D array, C

java - 如何根据变量填充多维数组