处理typedef和指针

时间:2013-07-01 17:47:18

标签: c pointers typedef

目前,我在理解有指针的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,对吗?谢谢。

2 个答案:

答案 0 :(得分:3)

这个

main1 = *main2;

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

示意图,您所做的(没有取消引用)是这样的:

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

变为

main1 --> some_object2;
main2 = NULL;

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

答案 1 :(得分:0)

main1 = main2使main1指向main2指向的同一对象。 main2 = NULL将指针main2设置为NULL但不影响main1。任何一项任务都不会改变该对象。