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

本文探讨了C++中链表复制的独特方式,重点分析了在不同代码段(1, 2, 3)中,指针同步和数据共享的变化。通过实验,解释了为何特殊复制方式会影响指针指向,以及当改变操作顺序时,如何影响链表节点间的链接。
摘要由CSDN通过智能技术生成

#include

#include

#include

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

把2注释掉,运行3

0818b9ca8b590ca3270a3433284dd417.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值