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

结构体嵌套二级指针

作者: 记事本的记事本 | 来源:发表于2019-08-12 22:31 被阅读0次
画的.png

在结构体中嵌套二级指针

struct Teacher
{
    char *name;
    char **students;
};

如上的结构体 ,首先打算弄个Techears类数组 然后..这样就可以存储多个老师了

代码如下所示

主要的步骤
①首先在main中创建二级指针struct Teacher **teachers
②然后把传到给这个二级指针赋值 ret = allocateSpace(&teachers);
③在allocateSpace中采用指针间接赋值的方式
④然后赋值完成后 进行内存的释放(内存的释放从低级到高级 意思是在上方图中 后申请的先释放)

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

struct Teacher
{
    char *name;
    char **students;
};

int allocateSpace(struct Teacher ***temp)
{
    if (NULL == temp)
    {
        //错误码 不同错误码表示不同错误
        return -1;
    }

    struct Teacher **ts = malloc(sizeof(struct Teacher *) * 3);
    for (int i = 0; i < 3; ++i)
    {

        //给老师结构体指针分配空间
        ts[i] = malloc(sizeof(struct Teacher));

        //给老师名字分配空间
        ts[i]->name = malloc(sizeof(char) * 64);
        sprintf(ts[i]->name, "Teacher_%d", i + 1);

        //给学生指针分配内存
        ts[i]->students = malloc(sizeof(char *)* 4);
        for (int j = 0; j < 4; ++j)
        {
            ts[i]->students[j] = malloc(sizeof(char) * 64);
            sprintf(ts[i]->students[j],"%s_Stu_%d",ts[i]->name,j + 1);

        }

    }

    *temp = ts;

    return 0;
}

void printTeachers(struct Teacher **teachers)
{
    if (NULL == teachers)
    {
        return;
    }

    for (int i = 0; i < 3; ++i)
    {
        printf("%s\n", teachers[i]->name);
        for (int j = 0; j < 4; ++j)
        {
            printf("   %s\n",teachers[i]->students[j]);
        }
    }
}


void freeSpace(struct Teacher **teachers)
{
    if (NULL == teachers)
    {
        return; 
    }

    for (int i = 0; i < 3; ++i)
    {

        if (teachers[i] == NULL)
        {
            continue;
        }

        if (teachers[i]->name != NULL)
        {
            free(teachers[i]->name);
            teachers[i]->name = NULL;
        }

        for (int j = 0; j < 4; ++j)
        {
            if (teachers[i]->students[j] != NULL)
            {
                free(teachers[i]->students[j]);
                teachers[i]->students[j] = NULL;
            }
        }

        free(teachers[i]->students);
        teachers[i]->students = NULL;


        free(teachers[i]);
        teachers[i] = NULL;
    }

    free(teachers);
    teachers = NULL;
}

void test()
{
    
    struct Teacher **teachers = NULL;

    int ret = 0;
    ret = allocateSpace(&teachers);
    if (ret < 0)
    {
        printf("allocateSpace 函数调用出错!\n");
        return;
    }

    //打印老师及其学生信息
    printTeachers(teachers);

    //释放内存
    freeSpace(teachers);
    teachers = NULL;

}


int main(){

    test();

    system("pause");
    return EXIT_SUCCESS;
}

相关文章

  • 结构体的基本操作

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

  • 结构体嵌套二级指针

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

  • 结构体嵌套二级指针

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

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

  • protoc-生成go指针

    protoc-生成go指针 这里指的是为结构体中基础类型生成go指针,嵌套结构体默认就是指针 为什么需要生成指针?...

  • 【Golang】json自定义序列化的深入解析

    对于使用结构体中嵌套结构体的情况,只有receiver为指针类型,而嵌套结构体为结构体的值语义的时候不能触发自定义...

  • JNI总结

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

  • 结构体中套二级指针

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

  • 结构体嵌套

    结构体嵌套 结构体嵌套时应逐级引用

  • C语言20 结构体指针

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

网友评论

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

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