#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct _Teacher
{
char*name;
char**student; //创建学生数组
}Teacher;
void allocateTeacherSpace(Teacher***tArr,int num)
{
Teacher**TeacherArr = malloc(sizeof(Teacher*)*num);//创建num个Teacher*
for (int i = 0; i < num;i++)
{
//给每个Teacher*开辟空间
TeacherArr[i] = malloc(sizeof(Teacher));
//给每个Teacher成员开辟空间
TeacherArr[i]->name = malloc(128);
TeacherArr[i]->student = malloc(sizeof(char*) * 5);
for (int j = 0; j < 5; j++)
{
TeacherArr[i]->student[j] = malloc(128);
}
}
*tArr = TeacherArr;
}
void nameTeacher(Teacher**tArr,int num)
{
for (int i = 0 ; i < num; i++)
{
char buf[128] = { 0 };
sprintf(buf, "Teacher_%d", i + 1);
strcpy(tArr[i]->name, buf);
for (int j = 0; j < 5; j++)
{
sprintf(buf, "T_%d_S_%d", i + 1, j + 1);
strcpy(tArr[i]->student[j], buf);
}
}
}
void printMsg(Teacher**tArr, int num)
{
for (int i = 0; i < num;i++)
{
printf("%s\n", tArr[i]->name);
for (int j = 0; j < 5; j++)
{
printf("%s\t\t", tArr[i]->student[j]);
}
printf("\n\n");
}
}
void freeMem(Teacher***tArr,int num)
{
Teacher**pTeacher = *tArr;
if (pTeacher==NULL)
{
return;
}
for (int i = 0; i < num; i++)
{
for (int j = 0; j < 5; j++)
{
free(pTeacher[i]->student[j]);
pTeacher[i]->student[j] = NULL;
printf("释放T%d的学生S%d的内存\n", i + 1, j + 1);
}
free(pTeacher[i]->name);
pTeacher[i]->name = NULL;
printf("释放T%d的name内存\n", i + 1);
free(pTeacher[i]->student);
pTeacher[i]->student = NULL;
printf("释放T%d的student内存\n", i + 1);
free(pTeacher[i]);
pTeacher[i] = NULL;
printf("释放T%d的内存\n", i + 1);
}
free(pTeacher);
printf("释放Teacher的内存\n");
*tArr = NULL;
}
void test11()
{
//堆区创建Teacher数组
Teacher**tArr = NULL;
int tNum = 9;
allocateTeacherSpace(&tArr, tNum);
//给Teacher数组赋值
nameTeacher(tArr, tNum);
printMsg(tArr, tNum);
freeMem(&tArr, tNum);
}
int main()
{
test11();
system("pause");
return 0;
}
相关推荐
WinCC7.5SP2生成PDF报表显示有错误或残缺的问题及解决方法
WinCC V7.5 SP2 自带的生成PDF报表功能异常。生成的PDF报表内容显示空白或有残缺。经测试后发现可以通过替换Adobe PDF Library库文件的方法解决该问题。
Record20—二级指针的输出模型
二级指针的输入输出模型
RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo
本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。
结构体中包含二级指针案例
给出如下结构体,要求全部在堆区开辟空间。有多个老师,每个老师有多个学生。 typedef struct { char *name;//老师 int stu_num;//学生数 char **stu_arr;//学生名字 }TEACHER; 需要注意以下问题: 此问题使用双层循环即可解决。 外层循环处理这三个成员变量:给name开辟空间;给stu_num赋值;给stu_arr开辟5个...
STM32 SYSTICK定时器及延时函数详解
STM32 SYSTICK及延时函数详解 SysTick定时器 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心
S7-1200与KINCO伺服通信实战:CM CANopen模块配置避坑指南(附完整PDO映射表)
本文详细解析了西门子S7-1200 PLC通过CM CANopen模块与KINCO伺服驱动器的通信配置全流程,重点解决PDO映射混乱、心跳报文配置错误等常见问题。提供硬件组态、参数设置、PDO映射模板及故障排查方案,助力工业自动化系统实现稳定高效的多轴运动控制。
结构体二级指针使用示例
#define INPUT_CNT 5 struct InputDataInfo { int iVal; double dVal; }; void struct2PointerTest() { InputDataInfo* pInfo[INPUT_CNT] = {0}; for (size_t i = 0; i < INPUT_CNT; i++) { pInfo[i] = new (std::nothrow) InputDataInfo(); if (pInfo[i]) {.
37.华为路由器:loopback(本地回环)接口的作用
本地环回接口(或地址),亦称回送地址(loopback address)。 此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常见于如下用途: 1 作为一台路由器的管理地址 系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址 ,管理员会使用该地址对路由器远程登录(telnet ),该地址实际上起到了类似设备名称一类的功能。 但是通常每台路由器上存在众多接口和地址,为何不从当中随便挑选一个呢 ? 原因如下:由于
C语言结构体
C语言结构体
DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密
DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。
CDMamba安装配置Windows(50系列的显卡)
本人家里的显卡是RTX3050的,运行起来非常缓慢,大家可以参考上一篇文章,以下是用RTX5080配置的CDMamba,里面有一些库没有更新,因此会比较坑爹。就是pytorch已经更新了,搭配的是cuda12.8,但是cdmamba里的mmcv只更新到cuda12.1的版本,当然很多人会说那就向下兼容,但是笔者已经尝试了,会一直提示mmcv的问题。因此,索性直接不用mmcv。
结构体指针的一些问题(包括二级指针)
结构体指针在平时工程中用的还是很多的,但是有时候如果有类似与二级的指针,可能就会有点乱。 结构体指针 一般来说我们先从定义结构体开始 比如: struct stduent{ int num; char *name; char sex; float score; }student1; 或者我们可以用typedef来重命名一下 typedef struct stdue...
Pytorch实用教程:super(MLP,self).__init__()和super().__init__()有什么区别?
在 Python 中,super()函数用于调用父类(超类)的方法。它的使用在继承关系中非常常见,特别是在初始化继承自父类的属性时。在 PyTorch 中,这通常见于初始化nn.Module类的子类。super()的两种调用方式有微妙的差别,但在 Python 3 中常常用来达到同样的目的。这种写法在 Python 2 中非常常见。这里,super()被调用时需要指定当前类名(MLP)和当前实例(self。
结构体资源申请与二级指针初始化赋值案例
结构体与二级指针初始化赋值案例 记录下今天遇到的二级指针初始化一直失败问题,在二级指针申请和赋值的时候,要注意访问的是哪一个具体的地址,直接访问arr 是二级指针,访问arr[i] 其实也是二级指针(我的理解),访问(*arr)[i] 才是访问的真正的资源。 不建议这种初始化方式,编码建议里有一条就是 资源初始化和释放尽量在同一层级。 代码如下: typedefstruct{ charname[10]; uint32_tsize; }Example; int...
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
学习c语言的第14天
在同一个函数里,若指针发生了偏移,并且没有额外的重置操作,在后续的循环里指针仍然会保持偏移后的位置,不会自动重置。用结构体与函数与数组的结合巩固知识体系(案例还是之前的选票系统)要注意结构体指针取值的符号是。和以前非结构体我们是用。之前的选票系统用指针来操作。结构体与指针的小应用。结构体二级指针的应用。
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
python ctypes 指针_Python与C/C++调用之ctypes,以及二级指针
python访问C/C++python的底层大部分都是C/C++实现,python和C和C++具有天然的互相调用优势;很多核心的算法库都是C/C++写的,在python开发过程中,经常访问别人的动态库;知名人工智能(深度学习)框架训练系统都是python写的,而运行时一般都是以动态库的形式提供;python访问C/C++的方式ctypes;pybind11;cffiswigctypes的优势不要修...
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
结构体成员变量指针与普通数据类型指针比较
写这篇文章的原因是,我很好奇链表的结点删除算法为啥修改了指针域的值就可以。 还是用代码来说事吧,简单的写一个测试案例: #include<stdio.h> typedef struct{ int* p; }*pstru; void ChangeIntPointerOne(int* p, int *q){ p = q;} void ChangeIntPointerTwo(i...
C语言 15.结构体和文件
1.结构体嵌套二级指针练习 struct Teacher { char* name; char** students; }; void allocateSpace(struct Teacher*** teachers) { if (teachers == NULL) { return; } //开辟内存 struct Teacher** ts = malloc(sizeof(struct Teacher*) * 3); //给
结构体指针和运用指针优化投票系统
结构体指针学习
数据结构初始化的几种方式
先向内存中申请一个结构体大小的空间,创建一个结构体指针指向这个空间,我们传指针的地址,就可以改变指针的指向,在函数中我们初始化了一个指针指向我们想要的地址,让我们传来的指针的也指向这个地址就行了,这种方法其实本质就是第二种方法。传值的时候传的是一级指针,在上面函数中形参也是一个结构体指针并且只是我们的一个备份,这个备份的改变不会对我们传的实参有任何的影响,我们只有传二级指针才会对我们的实参有影响。
C语言链表之有序插入
C语言的指针是真的……难!当结构体遇上二级指针变成链表,指针变量变来变去对于我这种刚接触的小白真的晕,加上这几天感冒咳嗽流鼻涕,卡了好几天才初步掌握。 如下是课程案例有序插入链表节点的demo和主要代码: ...
深拷贝函数写不好,程序崩溃少不了,你还在用浅拷贝吗?
掌握C语言结构体指针的深拷贝函数编写方法,避免内存泄漏与程序崩溃。适用于复杂数据结构复制,通过递归分配内存并复制内容,确保数据独立完整。提升程序稳定性,值得收藏。
C语言 第九章 指针
C语言 指针
C高级编程
C语言
二级指针、指针数组、结构体
记录C语言小白的学习历程 二级指针、指针数组 结构体
【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
一、结构体中嵌套二级指针、 1、结构体中嵌套二级指针 类型声明、 2、为 结构体内的二级指针成员 分配内存、 3、释放 结构体内的二级指针成员 内存、 二、完整代码示例、
3660



被折叠的 条评论
为什么被折叠?



