美文网首页
结构体中套二级指针

结构体中套二级指针

作者: 带着白卡去旅行 | 来源:发表于2018-09-13 11:04 被阅读14次

问题模型

导师学生模型

利用结构体中套二级指针 创建内存的方式

        p = (char **)malloc(3 * sizeof(char *));  //打造二维内存
        for (j = 0; j < 3; j++)
        {
            p[j] = (char *)malloc(120);
        }
        tmp[i].stuname = p; //
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

/*
"name1111"
"name2222"
"name3333"
*/

typedef struct Teacher
{
    //char student[10][30]
    char name[64];
    char *alisname;
    char **stuname;
    int age;
    int id;
}Teacher;

void printTeacher(Teacher *array, int num)
{
    int i = 0;

    for (i = 0; i < num; i++)
    {
        printf("age:%d \n", array[i].age);
    }
}

void sortTeacer(Teacher *array, int num)
{
    int     i, j;
    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;
            }
        }
    }
}

Teacher * createTeacher01(int num)
{
    Teacher * tmp = NULL;
    tmp = (Teacher *)malloc(sizeof(Teacher) * num); //  Teacher     Array[3]
    if (tmp == NULL)
    {
        return NULL;
    }
    return tmp; //

}

int createTeacher02(Teacher **pT, int num)
{
    int i = 0, j = 0;
    Teacher * tmp = NULL;
    tmp = (Teacher *)malloc(sizeof(Teacher) * num); //  Teacher     Array[3]
    if (tmp == NULL)
    {
        return -1;
    }
    memset(tmp, 0, sizeof(Teacher) * num);

    for (i = 0; i < num; i++)
    {
        char **p = NULL;

        //malloc一级指针
        tmp[i].alisname = (char *)malloc(60);

        //二级指针的第三种内存模型
        p = (char **)malloc(3 * sizeof(char *));  //打造二维内存
        for (j = 0; j < 3; j++)
        {
            p[j] = (char *)malloc(120);
        }
        tmp[i].stuname = p; //

    }

    *pT = tmp;  //二级指针 形参 去间接的修改 实参 的值 
    return 0; //
}

void FreeTeacher(Teacher *p, int num)
{
    int i = 0, j = 0;
    if (p == NULL)
    {
        return;
    }
    for (i = 0; i < num; i++)
    {
        //释放一级指针
        if (p[i].alisname != NULL)
        {
            free(p[i].alisname);
        }

        //释放二级指针
        if (p[i].stuname != NULL)
        {
            char **myp = p[i].stuname;
            for (j = 0; j < 3; j++)
            {
                if (myp[j] != NULL)
                {
                    free(myp[j]);
                }
            }
            free(myp);
            p[i].stuname = NULL;
        }
    }
    free(p);
}

void main()
{
    int         ret = 0;
    int         i = 0, j = 0;
    //Teacher       Array[3];  //在stack 分配内存
    int         num = 3;
    Teacher *pArray = NULL;
    ret = createTeacher02(&pArray, num);
    if (ret != 0)
    {
        printf("func createTeacher02() er:%d \n ", ret);
        return;
    }

    for (i = 0; i < num; i++)
    {
        printf("\nplease enter age:");
        scanf("%d", &(pArray[i].age));

        //printf("\nplease enter name:");
        //scanf("%s",  pArray[i].name ); //向指针所指的内存空间copy数据

        printf("\nplease enter alias:");
        scanf("%s", pArray[i].alisname);  //向指针所指的内存空间copy数据

        for (j = 0; j < 3; j++)
        {
            printf("please enter student name:");
            scanf("%s", pArray[i].stuname[j]);
        }
    }

    //打印老师年龄
    //  for (i=0; i<num; i++)
    //  {
    //      printf("age:%d \n", Array[i].age);
    //  }

    printTeacher(pArray, num);

    sortTeacer(pArray, num);

    printf("排序之后\n");

    printTeacher(pArray, num);

    FreeTeacher(pArray, num);

    printf("hello...\n");
    system("pause");
    return;
}

相关文章

  • 结构体中套二级指针

    问题模型 利用结构体中套二级指针 创建内存的方式

  • 结构体的基本操作

    结构体定义和初始化 结构体变量相互赋值 结构体数组 结构体嵌套一级指针 结构体嵌套二级指针 结构体偏移量 联合体 ...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

  • 结构体中套一级指针

    char *alisname;利用一级指针 创建别名。关键点: 因为num为3所以分配三个内存块

  • C语言20 结构体指针

    C语言20 结构体指针 探测结构体指针的特性 ++、-- 加法与减法 指针相减 使用结构体指针 结构体指针一定要指...

  • C语言-5、结构体

    写法一 写法二 写法三 结构体指针 结构体指针 与 动态内存开辟 结构体的数组 结构体与结构体指针 取别名 取别名...

  • 结构体嵌套二级指针

    在结构体中嵌套二级指针 如上的结构体 ,首先打算弄个Techears类数组 然后..这样就可以存储多个老师了 代码...

  • 函数指针,联合体,枚举,结构体和结构体指针

    函数指针 联合体 枚举 别名 结构体 结构体指针

  • Go语言之结构体指针

    结构体本身属于值类型,可以通过指针操作结构体,编程引用类型的数据,通过new()创建指针 结构体指针

  • 结构体嵌套二级指针

    要求:老师人数不限,老师有id,姓名,学生人数,学生姓名。 结构体定义 数组名指向数组首元素地址 功能:开辟num...

网友评论

      本文标题:结构体中套二级指针

      本文链接:https://www.haomeiwen.com/subject/pbfwgftx.html