C语言结构体指针问题

#include "stdio.h"#include "stdlib.h"typedef struct node2{ int pn; int pfn; struct node2 *next;}tpage;tpage *freee=NULL,*busy=NULL,*p;int M;void sort(){ tpage *s; s=freee; if(freee==NULL) { p->next=freee; freee=p; } else { while(s->next!=NULL) s=s->next; s->next=p; }}void input(){ int i; printf("输入内存块数:\n"); scanf("%d",&M); for(i=0;i<M;i++) { p=(tpage *)malloc(sizeof(tpage)); if(p==NULL) { perror("malloc"); exit(1); } p->pn=-1; p->pfn=i; p->next=NULL; sort(); }}void main(){ input(); int i; for(i=0;i<M;i++) { printf("%d %d \n",freee->pn,freee->pfn); }}输出结果freee->pfn都是一样的是什么鬼

第1个回答  2016-05-25
比如
struct LNode{
element data;
struct LNode *next;

}*Linklist;
LNode是结构变量名;
Linklist就是指针,指向该结构体的指针。
调用内部应为:结构变量名.成员名
第2个回答  2016-05-25
void main()

{

input();

int i;
tpage *p = freee;
for(i=0;i<M;i++)

{

printf("%d %d \n",p->pn,p->pfn);
p = p->next;

}

}

你的链表一直没有移动,打印出来的 始终是第一个节点的。

第3个回答  2016-05-25
没看全部,就最后那个循环,写的printf("%d %d \n",freee->pn,freee->pfn);就是反复输出,freee->pn和freee->pfn),当然是一样的。你意图要干啥?说清楚了才好改!
第4个回答  2016-05-25
你指针有没有移动,输出3次都是同一个节点,当然是一样的了。
可以这样改试试:
p = freee ;
for(i=0;i<M;i++)
{
printf("%d %d \n",p->pn,p->pfn);
p = p ->next ;
}本回答被提问者采纳
相似回答