c语言中指针复制的方法,C语言结构体中指针的复制问题

#include#include#includetypedef 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,可以看到结果是

242820c12098f7997b25a04098d3ebd5.png

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

0ec86e665bcbc8fe185b0c926e515d8b.png

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

把2注释掉,运行3

234c04285cceb06f649a7a9ea5c80563.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值