当前位置: 代码迷 >> C语言 >> C问题求助!
  详细解决方案

C问题求助!

热度:308   发布时间:2008-06-08 19:34:40.0
C问题求助!
先谢谢各位看贴的朋友!
本人在看书的途中,在建立链表这里我糊涂了,特来发贴,问下自己的这些问题,希望各位大大给解决一下!

建立链表的函数:
#include"stdio.h"
#include"malloc.h"           //*这里是怎么回事?malloc不是一个函数吗?怎么可以用来头文件?*//
#define NULL 0
#define LEN sizeof(struct student)         //*这里使用宏,sizeof是求字节数运算符,这里sizeof(struct student)应该怎么理解?*//
struct student
{
long num;
float score;
struct student *next;
};                 //*这里是定义一个结构体,struct student *next;这里是定义了一个*next的指针变量吗?整个结构体是一个数组吗?要怎么理解啊?*//
int n;               //*这是全局变量*//
struct student *creat(void)    //*这里是啥意思啊?是定义一个函数吗?*//
{
struct student *head;        //*这里是定义了一个结构体的指针吗?*//
struct student *p1,*p2;      //*这里也是定义了一个节后体的指针吗?*//
n=0;
p1=p2=(struct student*)malloc(LEN);   //*这里malloc是开辟一个长度为LEN的内存区,是不是在内存里预定一段空间,用来存放下面一些数据的?(struct student*)这里是强制转换吗?*//
scanf("%ld,%f",&p1->num,&p1->score); //*这里是输入*//
head NULL;
while(p1->num!=0)          //*这里是循环,当第一个节点不等于0时循环*//
{
n=n+1;
if(n==1)head=p1;           //*p1(num)指向head*//
else p2->next=p1;          //*否则,next指向p1?*//
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
return(head);
}
整个函数,在main里调用sreat时,返回的是一个head!
搜索更多相关的解决方案: student  struct  链表  next  变量  

----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"malloc.h"
//malloc函数在malloc.h头文件中,程序中要想使用malloc函数,必须包含此文件
#define NULL 0
#define LEN sizeof(struct student)
//*sizeof是求某种数据类型的长度(占用的字节数)的运算符,这里sizeof(struct student)这种用法就是求student这个结构的长度,和sizeof(int)是一个意思
struct student
{
long num;
float score;
struct student *next;
};//这里的next就像你所说的,是一个指针变量,它是指向一个结构体类型的指针变量,但是这个结构体类型“特殊”,就是这个结构体本身。结构体和数组在C语言中是两个概念,好好理解一下定义
int n;               //*这是全局变量*//
struct student *creat(void)//这是一个函数,返回值类型是一个指向student结构体的指针
{
struct student *head;//*这里是定义了一个结构体的指针吗?是*//
struct student *p1,*p2;//*这里也是定义了一个节后体的指针吗?是*//
n=0;
p1=p2=(struct student*)malloc(LEN);//*这里malloc是开辟一个长度为LEN的内存区,是不是在内存里预定一段空间,用来存放下面一些数据的?(struct student*)这里是强制转换吗?是。malloc函数返回的是void*,如果不强制转换C中是不允许的,C是类型敏感的*//
scanf("%ld,%f",&p1->num,&p1->score);
head =NULL;
while(p1->num!=0)//*这里是循环,当第一个节点不等于0时循环*//
{
n=n+1;
if(n==1)head=p1;           //*p1(num)指向head*//
else p2->next=p1;          //*否则,next指向p1?*//
p2=p1;@
p1=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
return(head);
}//while循环是一个建立链表的过程,当第一次循环时,执行完@处的语句(见代码中的标记)head,p1,p2,都指向堆内存中的同一块内存,接下来的malloc是在为下一个节点分配空间,然后的scanf读入结构体的内容。在第二次循环中,会执行else 后面的语句,使得新分配的内存成为p2的后继,然后p2指针后移重复,以上过程。实际上,p2指针相当于一个迭代器,p1相当于一个尾指针。lz可能对链表这一数据结构了解的不够透彻。。。。
整个函数,在main里调用sreat时,返回的是一个head!
----------------解决方案--------------------------------------------------------
2楼同志,您辛苦啦~~~呵呵
----------------解决方案--------------------------------------------------------
呵呵!谢谢2L您的回复,其实我如你所说,对链表的概念糊涂……总认为就是和数组一样性质的……我还得努力分析下你给我回答的这些问题……谢谢了啊!
----------------解决方案--------------------------------------------------------
  相关解决方案