yas*_*sar 4 c arrays struct pointers 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;
}
Run Code Online (Sandbox Code Playgroud)
invalid initializer在第14行给出了错误.我想要做的是获取结构指针数组的副本,它们位于不同的结构中.
哎哟; 这里有很多问题.
extern void *malloc(unsigned int);
Run Code Online (Sandbox Code Playgroud)
不要那样做; 使用,#include <stdlib.h>因为这将是正确的,你写的内容通常是不正确的(参数malloc()是a size_t,不一定是unsigned int;它可能是unsigned long,或其他类型).
struct Box {
int x, y ,w, h;
};
Run Code Online (Sandbox Code Playgroud)
除了飘忽不定的空间,struct Box还可以.
struct Wall {
char color[15];
struct Box *boxes[20];
};
Run Code Online (Sandbox Code Playgroud)
而struct Wall就OK了.
int main(int argc, const char *argv[])
Run Code Online (Sandbox Code Playgroud)
你没有使用argc或argv,所以你最好使用替代声明:
int main(void)
Run Code Online (Sandbox Code Playgroud)
原始代码:
{
struct Wall *mywall = malloc(sizeof(struct Wall));
Run Code Online (Sandbox Code Playgroud)
这会分配但不会初始化单个struct Wall.就其本身而言,虽然您应该在使用之前检查分配是否成功.您还需要担心分配struct Box数组元素指向的项目.
struct Box *myboxes[] = mywall->boxes;
Run Code Online (Sandbox Code Playgroud)
你手边有一场小小的灾难.你无法复制那样的数组.你没有检查过你有一个阵列.忽略错误检查,你会遇到以下问题之一:
struct Box *myboxes[] = { &mywall->boxes[0], &mywall->boxes[1], ... };
Run Code Online (Sandbox Code Playgroud)
要么:
struct Box **myboxes = &mywall->boxes;
Run Code Online (Sandbox Code Playgroud)
我不相信你想要第二个版本,因为它更短.
return 0;
Run Code Online (Sandbox Code Playgroud)
我喜欢return 0;在最后看到main(),即使C99允许你省略它.
}
Run Code Online (Sandbox Code Playgroud)