求教关于结构体指针赋值的有关问题
求教关于结构体指针赋值的问题
struct paiming
{
char name[20];
int b;
struct paiming *next;
};
程序1:
paiming *p=NULL,*q;
q = p;
q= (struct paiming*)malloc(sizeof(paiming));
strcpy(q->name, "abc");
q->b = 2;
q->next = NULL;
printf("%s",p->name);
输出结果为<null>
程序2:
paiming *p , *q;
p = (struct paiming*)malloc(sizeof(paiming));
strcpy(u->name, "ssssssss");
p->b = 3;
p->next = NULL;
q = p;
strcpy(p->name, "abc");
q->b = 2;
q->next = NULL;
printf("%s",p->name);
输出结果为abc
我想问一下程序1为什么输出的不是abc
他和程序2的区别在哪
谢谢!!!
------解决思路----------------------
程序1:
q = p;
q= (struct paiming*)malloc(sizeof(paiming));
连续对q赋值两次,p和q就已经不等价了,两个地址已经不同。
始终记住了,指针变量就是地址,你这两个程序应该都是想把p和q这两个变量当成一个变量用吧,那就必须让他们拥有相同的地址,自己试着分析一下吧,可以尝试去看看这两个指针变量的值。
struct paiming
{
char name[20];
int b;
struct paiming *next;
};
程序1:
paiming *p=NULL,*q;
q = p;
q= (struct paiming*)malloc(sizeof(paiming));
strcpy(q->name, "abc");
q->b = 2;
q->next = NULL;
printf("%s",p->name);
输出结果为<null>
程序2:
paiming *p , *q;
p = (struct paiming*)malloc(sizeof(paiming));
strcpy(u->name, "ssssssss");
p->b = 3;
p->next = NULL;
q = p;
strcpy(p->name, "abc");
q->b = 2;
q->next = NULL;
printf("%s",p->name);
输出结果为abc
我想问一下程序1为什么输出的不是abc
他和程序2的区别在哪
谢谢!!!
------解决思路----------------------
程序1:
q = p;
q= (struct paiming*)malloc(sizeof(paiming));
连续对q赋值两次,p和q就已经不等价了,两个地址已经不同。
始终记住了,指针变量就是地址,你这两个程序应该都是想把p和q这两个变量当成一个变量用吧,那就必须让他们拥有相同的地址,自己试着分析一下吧,可以尝试去看看这两个指针变量的值。