结构体内嵌一级指针

来源:互联网 发布:杭州seo外包服务 编辑:程序博客网 时间:2024/05/02 20:04

例程如下:

#define  _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>typedef struct Teacher{    char name[64];    char *alisname;    int age;}Teacher;int creatTeacher(Teacher **p, int num){    int i = 0;    Teacher *tmp = NULL;    tmp = (Teacher *)malloc(sizeof(Teacher)*num);    if (tmp == NULL)    {        return -1;    }    for (i = 0; i < num; i++)    {        tmp[i].alisname = (char *)malloc(60);    }    *p = tmp;    return 0;}void printTeacher(Teacher *Array, int num){    int i = 0;    for (i = 0; i < num; i++)    {        printf("name:%s\n", Array[i].name);        printf("alisname:%s\n", Array[i].alisname);        printf("age:%d\n\n", Array[i].age);    }}void sortTeacher(Teacher *Array, int num){    int i = 0, j = 0;    Teacher tmp;    for (i = 0; i < num; i++)    {        for (j = i + 1; j<num; j++)        {            if (Array[i].age>Array[j].age)            {                tmp = Array[i];                Array[i] = Array[j];                Array[j] = tmp;            }        }    }}void FreeTeacher(Teacher *p, int num){    int i = 0;    if (p == NULL)    {        return;    }    for (i = 0; i < num; i++)    {        if (p[i].alisname != NULL)        {            free(p[i].alisname);        }    }    free(p);   //分配内存时分配了两次,释放时也要释放两次}void main(){    int i = 0;    int ret = 0;    int num = 3;    Teacher *Array = NULL;    ret = creatTeacher(&Array, num);    if (ret != 0)    {        return;    }    for (i = 0; i < num; i++)    {        printf("please enter name:\n");        scanf("%s", Array[i].name); //name就是一个数组地址  所以这里不用加&号取地址            printf("please enter alisname:\n");        scanf("%s", Array[i].alisname); //alisname就是一个指针所储存的地址  所以这里不用加&号取地址        printf("please enter age:\n");        scanf("%d", &(Array[i].age));    }    printf("排序之前:\n");    printTeacher(Array, num);    sortTeacher(Array, num);    printf("排序之后:\n");    printTeacher(Array, num);    FreeTeacher(Array, num);    system("pause");}
0 0
原创粉丝点击