C语言 定义结构体类型函数的问题
本帖最后由 shuofxz 于 2016-3-27 22:25 编辑下面的代码是将输入的学号和成绩建立链表,并最终输出
代码可以运行,我想问的是:
struct student *creat() 为什么函数名前面要加*,有什么作用?
#include "stdio.h"
#include "malloc.h"
#define NODE struct student
struct student{
int num;
float score;
struct student *next;
};
struct student *creat(){
NODE *p, *q, *head;
p = q = (NODE*)malloc(sizeof(NODE));
head = NULL;
int n = 0;
printf("请输入学号:");
scanf("%d",&(p->num));
while(p->num)
{
printf("请输入成绩:");
scanf("%f", &(p->score));
printf("\n");
if(n == 0){
head = p;
n += 1;
}
else{
q->next = p;
}
q = p;
p = (NODE*)malloc(sizeof(NODE));
printf("请输入学号:");
scanf("%d",&(p->num));
}
q->next = NULL;
return head;
}
void print(NODE *head){
NODE *p;
p = head;
while(p)
{
printf("%d \t %3.1f\n", p->num, p->score);
p = p->next;
}
}
int main(){
struct student *stu;
stu = creat();
print(stu);
return 0;
} struct student *creat() ,实际上就是 student* creat();
就是一个函数声明,最好不要加struct,好理解。
加*表示函数的返回值的类型,是指向student这个结构体的指针啊 struct student *creat()加*标识返回的是struct student 结构的一个地址,地址是在子函数里申请的,不然你的head出不来 ,也可以用函数参数传进去也是可以的! muyu0096 发表于 2016-3-26 23:18
struct student *creat() ,实际上就是 student* creat();
就是一个函数声明,最好不要加struct,好理解。 ...
谢谢,明白了~ 好多好多鱼 发表于 2016-3-27 22:22
struct student *creat()加*标识返回的是struct student 结构的一个地址,地址是在子函数里申请的,不然 ...
谢谢~
页:
[1]