C语言结构体中指针的复制问题

来源:互联网 发布:淘宝买家晒图 编辑:程序博客网 时间:2024/05/15 00:22
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct TNode{int data;struct TNode * next;}TNode,*Tree;int main(){Tree a,b,c,d;c=(Tree)malloc(sizeof(TNode));c->data=7;c->next=NULL;d=(Tree)malloc(sizeof(TNode));d->data=10;d->next=NULL;a=b=(Tree)malloc(sizeof(TNode));//这儿是关键//-------------1------------------b=c;printf("b=c\n");printf("b->data= %d \n",b->data);printf("a->data= %d \n",a->data);//------------2-----------------//b->next=c;//printf("b->next=c\n");//      printf("b->data=%d\n",b->data);//      printf("a->data=%d\n",a->data);//printf("b->next->data= %d \n",b->next->data);//printf("a->next->data= %d \n",a->next->data);////a->next=d;//printf("a->next=d\n");//printf("b->next->data= %d \n",b->next->data);//printf("a->next->data= %d \n",a->next->data);//--------------3-----------//c->next=d;//b=c;//printf("c->next=d\n");//printf("b->data= %d \n",b->data);//printf("a->data= %d \n",a->data);//printf("b->next->data= %d \n",b->next->data);//printf("a->next->data= %d \n",a->next->data);return 1;}

上面是我们的程序。有三个部分,分别标为1,2,3

加入我们运行1,可以看到结果是

这个结果也是符合我们期望的。假如,注释掉1,运行2部分,可以得到


可以看到,尽管a,b的data都是零,但是由于他们在刚开始的特殊的复制方式,他们两者其中一个的指针只向C,剩下的一个指针也会自动指向C

把2注释掉,运行3


如果采用b=c这种方式,b可以得到C的一切,的那是a缺不能,也就是说a和b指针的同步关系已经被破坏了


0 0