直接上代码,理解下面代码中 *p2 = *p1;
有关结构体指针的拷贝。
#include <stdio.h>
#include <stdlib.h>
struct c{
char ca;
char cb;
};
struct a{
int i;
int j;
int k;
struct c cc;
struct c *cp;
};
int main(void)
{
struct a *p1;
struct a *p2;
struct c *mcp;
p1 = (struct a *)malloc(sizeof(struct a));
p1->cp = (struct c *)malloc(sizeof(struct c));
p2 = (struct a *)malloc(sizeof(struct a));
p2->cp = (struct c *)malloc(sizeof(struct c));
mcp = p2->cp ;
p1->i =10 ;
p1->j =20 ;
p1->k =30 ;
p1->cc.ca = 'z';
p1->cc.cb = 'q';
p1->cp->ca='a' ;
p1->cp->cb='b' ;
printf("p1 i :%d\n",p1->i);
printf("p1 j :%d\n",p1->j);
printf("p1 k :%d\n",p1->k);
printf("p1->cc.ca :%c\n",p1->cc.ca);
printf("p1->cc.cb :%c\n",p1->cc.cb);
printf("p1->cp->ca :%c\n",p1->cp->ca);
printf("p1->cp->cb :%c\n",p1->cp->cb);
p2->cc.ca = 'e';
p2->cc.cb = 'f';
p2->cp->ca='c' ;
p2->cp->cb='d' ;
printf("---- before copy ----\n");
printf("p2 i :%d\n",p2->i);
printf("p2 j :%d\n",p2->j);
printf("p2 k :%d\n",p2->k);
printf("p2->cc.ca :%c\n",p2->cc.ca);
printf("p2->cc.cb :%c\n",p2->cc.cb);
printf("p2->cp->ca :%c\n",p2->cp->ca);
printf("p2->cp->cb :%c\n",p2->cp->cb);
printf("mcp->ca :%c\n",mcp->ca);
printf("mcp->cb :%c\n",mcp->cb);
*p2 = *p1;
printf("---- after copy ----\n");
printf("p2 i :%d\n",p2->i);
printf("p2 j :%d\n",p2->j);
printf("p2 k :%d\n",p2->k);
printf("p2->cc.ca :%c\n",p2->cc.ca);
printf("p2->cc.cb :%c\n",p2->cc.cb);
printf("p2->cp->ca :%c\n",p2->cp->ca);
printf("p2->cp->cb :%c\n",p2->cp->cb);
printf("mcp->ca :%c\n",mcp->ca);
printf("mcp->cb :%c\n",mcp->cb);
return 0;
}