-1

目前,我在理解具有指针的 typedef 概念时遇到了一些困难。假设我们有这个:

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

typedef struct command *command_t;

command_t read_command(){
    command_t main1;
    command_t main2;
    //some code that set the instance of main1
    //some code that set the instance of main2
    if(main1->u->command[0] == main2->u->command[1])
    {
        main1 = *main2;
        main2 = NULL;
    }
    //some other code in here
}

我的问题是,因为 command_t 定义为指向命令的指针。在 if 语句中,在将 main2 的实例放到 main1 之前,我应该先取消对 main2 的引用吗?如果我做这样的事情,我会精简语句“main2 = NULL;” 不会将对象 main1 设置为 NULL,对吗?谢谢你。

4

2 回答 2

3

这个

main1 = *main2;

无论如何都是错的。两者属于同一类型。你不应该在分配中尊重任何一个(除了你取消引用两者的情况)。

从原理上讲,您所做的(没有取消引用)是这样的:

main1 --> some_object;
main2 --> some_object2;

变成

main1 --> some_object2;
main2 = NULL;

您丢失了对 的引用some_object,它不会将其归零或释放它。

于 2013-07-01T17:49:30.427 回答
0

main1 = main2 使 main1 指向 main2 指向的同一对象。main2 = NULL 将指针 main2 设置为 NULL,但不影响 main1。任何一个赋值都不会更改对象。

于 2013-07-01T17:56:14.617 回答