shuofxz 发表于 2016-3-26 21:02:05

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;
}

muyu0096 发表于 2016-3-26 23:18:46

struct student *creat() ,实际上就是 student* creat();
就是一个函数声明,最好不要加struct,好理解。
加*表示函数的返回值的类型,是指向student这个结构体的指针啊

好多好多鱼 发表于 2016-3-27 22:22:04

struct student *creat()加*标识返回的是struct student 结构的一个地址,地址是在子函数里申请的,不然你的head出不来 ,也可以用函数参数传进去也是可以的!

shuofxz 发表于 2016-3-27 22:24:51

muyu0096 发表于 2016-3-26 23:18
struct student *creat() ,实际上就是 student* creat();
就是一个函数声明,最好不要加struct,好理解。 ...

谢谢,明白了~

shuofxz 发表于 2016-3-27 22:25:17

好多好多鱼 发表于 2016-3-27 22:22
struct student *creat()加*标识返回的是struct student 结构的一个地址,地址是在子函数里申请的,不然 ...

谢谢~
页: [1]
查看完整版本: C语言 定义结构体类型函数的问题