zoukankan      html  css  js  c++  java
  • 结构体中含有结构体指针

    头文件:

    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>

    全局变量:

    const int t_length = 2;
    
    int s_index = 5000;
    
    typedef struct Student{
        int id;
        char name[64];
        int age;
    }Student;
    typedef struct Teacher{
        int id;
        char name[64];
        int age;
        int s_num;
        Student *stu;
    }Teacher;

    函数原型:

    void createTeahcer(Teacher **ppt,int t_num);//为教师数组分配内存
    
    void freeTeacher(Teacher *pt, int t_num); //释放内存
    
    void sortStudent( Student * pt, int num ); //学生数组的排序
    
    void sortTeacher(Teacher *pt, int num); //教师数组的排序
    
    void printTeacher(Teacher *pt, int num); //遍历数组

    实现方法:

    void createTeahcer(Teacher **ppt,int t_num){
    
        Teacher *temp;
    
        temp = (Teacher *)malloc(sizeof(Teacher) * t_num);
    
        *ppt = temp;
    
    }
    
    void freeTeacher(Teacher *pt, int t_num){
        
        int i;
    
        if(pt != NULL){
    
            for (i = 0; i < t_num; ++i){
                if(pt[i].stu != NULL){
                    free(pt[i].stu);
                    pt[i].stu = NULL;
                }
            }
    
            free(pt);
        }
    
        
    }
    
    
    void sortStudent( Student * pt, int num ) {
        
        int i, j;
    
        Student temp;
    
        for(i = 0; i < num; ++i){
    
            for(j = i + 1; j < num; ++j){
    
                if(pt[j].age < pt[i].age){
    
                    temp = pt[j];
                    pt[j] = pt[i];
                    pt[i] = temp;
    
                }
            }
    
        }
    }
    
    void sortTeacher(Teacher *pt, int num){
    
        int i, j;
    
        Teacher temp;
    
        for(i = 0; i < num; ++i){
    
            for(j = i + 1; j < num; ++j){
            
                if(pt[j].age < pt[i].age){
                    
                    temp = pt[j];
                    pt[j] = pt[i];
                    pt[i] = temp;
    
                }
            }
    
            sortStudent(pt[i].stu, pt[i].s_num);
    
        }
    
    }
    
    
    
    void printTeacher(Teacher *pt, int num){
    
        int i, j = 0;
    
        Student stu;
        printf("
    ");
        for(i = 0; i < num; ++i){
            printf("学号:%d 姓名:%s 年龄:%d
    ", pt[i].id, pt[i].name, pt[i].age);
    
            for(j = 0; j < pt[i].s_num; ++j){
                stu = (pt[i].stu)[j];
                printf("第%d位学生 学号:%d 姓名:%s 年龄:%d
    ",j + 1, stu.id, stu.name, stu.age);
            }
    
        }
    
    
    }

    测试:

    int main(){
    
        int i, j;
    
        Teacher *pt = NULL;
    
        createTeahcer(&pt, t_length);
    
        for(i = 0; i < t_length; ++i){
            pt[i].id = i + 1002;
            printf("请输入第%d老师位的名字:", i + 1);
            scanf("%s",&(pt[i].name));
    
            printf("请输入第%d位老师的年龄:", i + 1);
            scanf("%d", &(pt[i].age));
            
            printf("请输入第%d位老师的所带学生的人数:", i + 1);
            scanf("%d", &(pt[i].s_num));
    
            pt[i].stu = (Student *)malloc(sizeof(Student) * (pt[i].s_num)); //为老师所拥有的学生分配内存
    
            for( j = 0; j < pt[i].s_num; ++j){
                (pt[i].stu)[j].id = 5000 + s_index++;
    
                printf("请输入第%d位同学的名字:", j + 1);
                scanf("%s",&((pt[i].stu)[j].name));
    
                printf("请输入第%d位同学的年龄:", j + 1);
                scanf("%d", &((pt[i].stu)[j].age));
            }
    
        }
        sortTeacher(pt,t_length);
        printTeacher(pt, t_length);
        freeTeacher(pt, t_length);
    
        system("pause");
        return 0;
    }

    运行结果:

  • 相关阅读:
    sniffer 和 debug flow
    如何认识TOS----DSCP 对照表
    NAT alg 和 ASPF
    使用refind引导多系统
    Backdooring a OS VM
    exit(0)与exit(1),return三者区别(详解)
    Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
    2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
    高斯消元法(Gauss Elimination)【超详解&模板】
    2015 计蒜之道 初赛(4)爱奇艺的自制节目(枚举 贪心)
  • 原文地址:https://www.cnblogs.com/zhouquan-1992-04-06/p/6240207.html
Copyright © 2011-2022 走看看