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 ;
}本回答被提问者采纳

关于C语言结构体指针的一个疑问?
出现此问题的原因在于链表创建create函数有问题,问题定位在图中红色框内。此处每个节点使用的是局部变量,函数结束后,局部堆栈虽然内容不会清除,但内存会被回收,如果其它地方也使用堆栈可能会分给它用,内存内容就会改变。正确的方式是申请堆内存。使用malloc函数,同时包含头文件#include<stdlib.h>。框内...

c语言结构指针问题
LinkList L; \/\/ 相当struct Lnode* L;两者区别,N 是分配了单元的结构,L 是指针,尚无存储单元。L=&N; \/\/ 初始化,L 才有 存储单元。P是指针 struct Lnode* P; \/\/ LinkList P;P=L->next; \/\/ 把地址赋过去, L->next 是 struct Lnode P 是 L 的 下一个 节点。

C语言里结构体的问题。结构体定义指针类型是怎么回事?
1、typedefchar**HuffmanCode实际上是typedef(char*)*HuffmanCode。写成这种形式更好理解,**HuffmanCode是指向指针的指针,这里也可以理解为是指向字符串的指针,因为char*字符数组相当于字符串。2、*HuffmanTree表示指向结构体HTNode的指针,HTNode是typedef语法指定的结构体的别名,然后*HuffmanTree是在定义...

C语言结构体内的指针问题
这个问题很直观。当struct student_a st1=st;时只将结构体变量st中的指针name拷贝到了st1中的指针变量name,就是说只使st1.name和st.name同时指针了由st.name=malloc(100);动态分配的片区,并没有重新再为st1.name分配100个字节。你可以这样考虑:1.如果由malloc分配的堆片区可以再复制,那怎么释放...

C语言 结构体指针的问题 请解释下lnode * create()这个 函数的每条语 ...
lnode * create(){ \/\/返回的是指向结构体变量的指针,跟普通变量同int i; \/\/ 定义变量linklist head,p; \/\/ 定义结构体指针变量head=(linklist)malloc(sizeof(lnode)); \/\/ 开辟一个结构体大小的内存空间,并将其地址赋值给head head->next=NULL; \/\/ 初始化刚开辟出的结构体空间的next...

结构体最后大括号后面跟两个指针
总结 在C语言中,结构体最后大括号后面跟两个指针使得结构体更加灵活和方便。指向结构体的指针可以用于访问结构体中的所有成员,而指向结构体数组的指针则可以用于处理多个结构体,方便访问结构体数组中的元素。学会灵活运用这两种指针,将有助于提高我们的编程效率。

c语言结构体问题想问一下a【i】.s什么意思?谢谢!
a是结构体数组,i是这个数组的第i个结构体;a[i]同一个类型数据的一个指针,这儿是判断s指向的这个结构里的成员s是否比a[i]里的s大;s是指向结构数组a的某一个值,这实际就是比较结构数组a里面的2个元素的s的值的大小。例:struct A { int s;}a[i];A *s;...

c语言指针问题 &T不是表示T本身的储存地址吗?为什么传进去的却是T所...
BiNode T;就是定义了一个结构体类型 BiTree T;是定义了一个该结构体类型的指针,相当于BiNode* T。2.接下来从main函数入手:int main(){ BiNode *T; \/\/定义一个结构体的指针,指针在定义的时候就要加*的。CreatBiTree(&T);① PreOrderTraverse(T);② return 0;} ①这就就是在调用...

C语言中p-> x是什么意思啊?
C语言中p->x是结构体指针变量p引用结构体成员x的方式。结构体指针变量引用结构体成员用箭头(->),非”结构体指针“变量引用结构体成员用点(.)。操作方法如下:1、首先定义一个人的结构体。结构体中的每个成员都需要指明类型,如上例所示,姓名为char字符类型、年龄为int类型,身高为double类型。2、...

C语言结构体问题
你肯定认为 (++pn)->b 是指向 c (也就是5.0)的吧 你试着运行 同样错 结果为0 根本原因:知识点理解---指针类型(此处为结构体指针)struct x *pn 代表了pn是一个指向 struct x 类型的指针,所以,当 执行 (++pn)时,pn指针指向的地址增加的数量 等于 struct x 的字节数 也...

相似回答