目前,我在理解有指针的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,对吗?谢谢。
答案 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。任何一项任务都不会改变该对象。