C - 使用指向数组的指针

  • 本文关键字:数组 指针 c malloc
  • 更新时间 :
  • 英文 :


目前,我的代码和对指针的理解都存在问题。 这是代码

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

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

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

所以它给了我一个 2d 命令数组。但是我的老师告诉我,结构命令 *command[2] 是指向数组命令大小 2 的指针。因此,cur_command->u.command[0]给出第一个命令元素,而不是指向大小为 2 的命令数组的指针。我的问题是,我如何分配内存来开发这种行为。感谢

首先,我建议将一个变量的名称更改为,例如 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视为这样的数组......

相关内容

  • 没有找到相关文章