gpt4 book ai didi

c - 使用指向数组的指针

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

目前,我的代码和我对指针的理解遇到了问题。这是代码

struct command
{
int type;
int *input;
int *output;
union{
struct command *command[2];
char **word;
}u;
};

据我了解,实例结构命令 *command[2] 是指向命令数组的指针数组。所以我用这些分配数组:

cur_command->u.command[0] = malloc(sizeof(struct command[2]));

所以它给了我一个二维数组的命令。然而我的老师告诉我 struct command *command[2] 是一个指向大小为 2 的数组命令的指针。所以 cur_command->u.command[0] 给出第一个命令元素而不是指向的指针命令数组大小为二。我的问题是,我怎样才能分配内存来开发这种行为。谢谢

最佳答案

首先,我建议将一个变量的名称更改为,例如cmd 而不是 command 以减少混淆。即:

....
union{
struct command *cmd[2];
char **word;
}u;
....

现在,正如其他一些评论所指出的,cur_command->u.cmd 是一个包含两个指向 struct command 的指针的数组。 cur_command->u.cmd[0] 是两个指针中的第一个,cur_command->u.cmd[1] 是第二个。为了使用它们中的任何一个,它们应该被初始化为指向实际 struct command 对象的指针:

cur_command->u.cmd[0] = malloc(sizeof(struct command));
cur_command->u.cmd[1] = malloc(sizeof(struct command));

然后,您可以像使用 cur_command 一样使用其中任何一个,它也是指向 struct command 的指针。也就是说,你可以设置一些字段:

cur_command->u.cmd[0]->type = 1;
....

不要忘记在用完后释放内存:

free(cur_command->u.cmd[0]);
free(cur_command->u.cmd[1]);

由于结构是递归的,您可能需要一些递归代码来正确释放所有内存,具体取决于您将这些东西链接在一起的深度...

另请注意,在您发布的代码 (malloc(sizeof(struct command[2]))) 中,sizeof(...) 位不是做你想做的事。我不完全确定它甚至应该编译,因为你不能将 struct 视为这样的数组......

关于c - 使用指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435341/

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