2024-2025-1 20241401 《计算机基础与程序设计》 第十三周学习总结

news/2024/12/19 21:14:19/文章来源:https://www.cnblogs.com/Xseventeen/p/18617944
班级链接 2024计算机基础与程序设计
作业要求 第十三周作业

教材学习内容总结

《C语言程序设计》第12章

  • 结构体的定义和使用:
    结构体类型的定义,以及结构体变量的创建和使用。结构体允许将不同数据类型的成员组合成一个整体,以便于管理和引用。
  • 结构体变量的初始化:
    结构体变量的两种初始化方式,包括在创建时使用{}进行初始化,以及使用.操作符指定成员变量的值
  • 结构体成员的引用:
    使用点运算符.访问结构体成员;在结构体嵌套时以级联方式访问数据。
  • 结构体数组:
    结构体数组的定义和使用,即如何存储和操作一组结构体类型的数据。
  • 指向结构体的指针:
    指向结构体的指针的定义,以及通过指针访问和操作结构体成员的方法。
  • 结构体的嵌套定义:
    一个结构体的成员可以是另一个结构体,这种特性使得可以构建更复杂的数据类型。
  • 动态数据结构和动态链表:
    动态链表的构建和操作,是数据结构基础的重要组成部分。

教材学习中的问题与解决过程

问题1:如何通过指针访问和修改结构体成员?
AI:通过指针访问和修改结构体成员是C语言中的一个重要概念。以下是如何操作的步骤:

  1. 声明指向结构体的指针:
    首先,你需要有一个指向结构体的指针。这可以通过声明一个指针并将其初始化为一个结构体变量的地址来实现。
    Student *ptr;
    Student student = {"John Doe", 20, 89.5};
    ptr = &student; // ptr现在指向student
    
  2. 通过指针访问结构体成员:
    使用箭头操作符(->)来访问指针指向的结构体的成员。
    printf("%s\n", ptr->name); // 打印student的name成员
    
  3. 通过指针修改结构体成员:
    同样使用箭头操作符(->),你可以修改结构体成员的值。
    ptr->age = 21; // 将student的age成员修改为21
    ptr->score = 95.0; // 将student的score成员修改为95.0
    
  4. 指针递增:
    如果你有一个结构体数组,你可以通过递增指针来遍历数组。
    Student students[3] = {{"John Doe", 20, 89.5},{"Jane Smith", 22, 92.0},{"Emily Johnson", 19, 88.0}
    };
    Student *ptr = students; // ptr指向数组的第一个元素
    for (int i = 0; i < 3; i++) {printf("Name: %s, Age: %d, Score: %.2f\n", ptr->name, ptr->age, ptr->score);ptr++; // 移动到下一个元素
    }
    
  5. 指针和数组的关系:
    在结构体数组中,数组名本身就是指向数组第一个元素的指针。因此,你可以直接使用数组名作为指针来遍历数组。
    for (int i = 0; i < 3; i++) {printf("Name: %s, Age: %d, Score: %.2f\n", students[i].name, students[i].age, students[i].score);
    }
    
    或者使用指针:
    for (int i = 0; i < 3; i++) {printf("Name: %s, Age: %d, Score: %.2f\n", ptr[i].name, ptr[i].age, ptr[i].score);
    }
    

通过这些步骤,你可以有效地通过指针来访问和修改结构体成员。这是C语言中处理复杂数据结构的基础,也是理解更高级数据结构如链表、树等的关键。

问题2:如何使用malloc和free来动态分配和释放结构体?
AI:在C语言中,使用mallocfree函数来动态分配和释放内存是常见的做法,特别是当你需要在运行时决定数据结构的大小时。以下是如何使用malloc来动态分配结构体内存,以及使用free来释放这些内存的步骤:

  • 使用malloc动态分配结构体
  1. 包含头文件
    要使用mallocfree,你需要包含stdlib.h头文件。

  2. 分配内存:
    使用malloc函数分配结构体所需的内存。malloc的参数是所需内存的大小,返回值是指向分配内存的指针。

    Student *ptr = (Student *)malloc(sizeof(Student));
    

    这里,sizeof(Student)计算Student结构体的大小,malloc根据这个大小分配内存,并将这块内存的首地址返回。

  3. 检查分配是否成功:
    malloc可能因为内存不足而失败,返回NULL。因此,检查返回值是很重要的。

    if (ptr == NULL) {fprintf(stderr, "Memory allocation failed.\n");exit(1); // 或者其他错误处理代码
    }
    
  4. 初始化结构体:
    分配内存后,你可以初始化结构体成员。

    ptr->name = "John Doe";
    ptr->age = 20;
    ptr->score = 89.5;
    
  • 使用free释放结构体
  1. 释放内存:
    当你不再需要动态分配的内存时,使用free函数释放它。
    free(ptr);
    
    free的参数是指向之前malloc分配内存的指针。调用free后,指针不再指向有效的内存。
  2. 设置指针为NULL
    释放内存后,将指针设置为NULL是一个好习惯,这样可以避免悬空指针问题。
    ptr = NULL;
    

基于AI的学习

学习进度条

计划学习时间:20h
实际学习时间:20h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855590.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang的互斥锁和读写锁

golang mutex(互斥锁) 1.锁最本质的作用 保证原子性 2.mutex 使用原则 适用于并发编程,尽量减少加锁区域的逻辑 3.mutex的局限性 仅限于单个进程内操作 sema(信号量,semaphore的简称)是一种用于并发控制的机制 资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数…

「测试人员」年终总结及来年规划

年底一般企业都会针对项目写总结,一般流程是组员呈交给组长,组长递交给测试经理,所以每个层级写各自的总结,会有不同的侧重点。 今天分别来聊聊测试工程师、测试组长以及测试经理年终总结的关注点在什么地方以及采用什么样的方法及策略使年终总结有实际意义且高大上。📝 …

【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章基于FPGA的2FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga 2fsk-CSDN博客的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(…

征程 6 云端 Ota 升级方案设计与实现

01 引言 在开发、调测过程中,经常通过 Ota 技术升级应用软件、底软。目前,项目上已将 Matrix6 的 Demo 部署在实车上,每次软件、底软需要版本更替或版本升级时,都需要研发测试同学上到车上使用工控机进行手动升级。 这流程存在耗费人力多,花费时间长,流程易出错的问题,并…

vxe-table 树表格新增数据,插入指定节点位置操作

vxe-table 新增数据,插入指定节点位置操作 官网:https://vxetable.cn npm install vxe-pc-ui@4.3.37 vxe-table@4.9.31// ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css import VxeUITable from vxe-table import vxe-table/lib/style.css // ...createAp…

less5

1.在URL处输入 ?id=1 ?id=1 ?id=1" ?id=1/1发现回显只有you are in......和报错 报错:判断回显是布尔类型 使用order by发现回显有三栏 ?id=1 order by 4%23 ?id=1 order by 1%23 ?id=1 order by 3%23判断数据库长度:8位 ?id=1 and length((select database()))&g…

Java-递归查询部门下所有子部门(包括本部门)

Java-递归查询部门下所有子部门(包括本部门),会得到一个部门id的集合:List deptIds具体代码如下: //递归1public List<Long> queryAllSubInstitutionIds(Long institutionId) {List<Long> subInstitutionIds = new ArrayList<>();querySubInstitutionIds…

生物医学信息

生物信息学基础 生物医学信息学的概念的掌握生物信息学很大一部分工作体现在生物数据的收集、存储、管理与提供 利用多组学数据(基因组,转录组,表观遗传组、蛋白组等)和机器学习、数据挖掘的方法 ,挖掘潜在的生物学、医学的知识和模式,用于解决诊断和治疗。中心法则是什么…

5、导出表

5、导出表 typedef struct _IMAGE_EXPORT_DIRECTORY {DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name; // 指向 导出表的文件名DWORD Base; // 导出函数的起始序号DWORD NumberOfFunctions; // 所有导…

4、文件与内存转换相关

4、文件与内存转换相关 FileBufferToImageBuffer 也是一样的长话短说。这里涉及了一点,就是内存对齐 PE头与节区之间 节区与节区时间会发生内存对齐。在文件中有一个文件对齐 ​​ 在可选PE头中有这两个进行标识,之前也写过这个内存对齐的博客,这里就不多说了 下面贴几个代…

1、PE 初识

1、PE 初识 概论 首先 PE头部分主要是学习PE结构的前半部分,每一个是做什么的,以及重点是什么,每一个是做什么用的。并使用Cpp代码来解析该PE头 注意这里用了一个Windows.h的头文件,后面再说。 PE是Windows系统 PE结构(Portable Executable),即可移植可执行文件格式,是…

交换空间swap

交换空间: 交换空间是硬盘上的一部分,被用作虚拟内存,当系统的物理内存(RAM)不足时,系统会使用交换空间来存储暂时不用的数据。1.关闭交换空间 1)关闭所有交换空间 swapoff -a2)关闭特定的交换空间 swapoff /dev/sdb12.开启交换空间 1)开启所有交换空间 swapon -a2…