作业信息
这个作业属于哪个课程 | <班级的链接>(2022-2023-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(2022-2023-1计算机基础与程序设计第十一周作业) |
这个作业的目标 | 自学《C语言程序设计》第11章 |
作业正文 | https://www.cnblogs.com/yang-ziran/p/16892100.html |
() |
教材学习内容总结
《C语言程序设计》第11章主要介绍了指针和一维数组间的关系;指针和二维数组间的关系;指针数组及其应用(指针数组用于表示多个字符串,指针数组用于表示命令行参数);动态数组(C程序的内存映像,动态内存分配函数,长度可变的一维、二维动态数组)。同时,还补充拓展了常见的内存错误及其对策;缓冲区溢出攻击。
教材学习中的问题和解决过程
-
问题1:教材中说p++和p+1本质上是两个不同的操作,看了书之后,我仍然不太理解,二者究竟有何区别?
-
问题1解决方案:我在网上查找了相关的资料,i++:先引用i=i,再执行i=i+1,也相当于执行代码块后实现了i自增1;i=i+1是直接增加1。对于i+1和i-1来说,i的值不变。比如执行数组a[i+1]后,i值不变,但执行a[i++]或a[i--]后,i值会改变。
参考链接https://blog.csdn.net/weixin_46108456/article/details/126135526和https://blog.csdn.net/sman19999/article/details/107584382?ops_request_misc=&request_id=&biz_id=102&utm_term=i++%E5%92%8Ci+1&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-107584382.nonecase&spm=1018.2226.3001.4187以及https://blog.csdn.net/m0_46340286/article/details/123333132?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166860085416782427464295%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166860085416782427464295&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-123333132-null-null.142v63control,201v3control_2,213v2t3_esquery_v1&utm_term=i%2B%2B%E5%92%8Ci%2B1&spm=1018.2226.3001.4187 -
问题2:教材中介绍了动态数组,当我们不再使用动态内存时,应该如何用free()来释放内存呢?
-
问题2解决方案:我在网上查找了相关资料,free() 释放的是指针指向的内存,而不是指针。
栈是由编译器自动分配释放,存放函数的参数值、局部变量的值等。操作方式类似于数据结构中的栈。堆一般由程序员分配释放,若不释放,程序结束时可能由OS回收。注意这里说是可能,并非一定。所以我想再强调一次,记得要释放。它与数据结构中的堆是两回事,分配方式倒是类似于链表。
参考链接https://blog.csdn.net/fanxueya1322/article/details/86567171 -
问题3:指针数组在使用的时候应该注意些什么?
-
问题3解决方案:根据课上老师的讲解和上网查找的资料,
指针一定要初始化后进行解引用操作(*p),否则,可能出现对未知内存块的操作,因为不初始化的指针一开始的指向是随机的。(要知道指针指向什么)
参考链接https://blog.csdn.net/weixin_43572595/article/details/115769551和https://blog.csdn.net/karry_hahaha/article/details/121978645?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166860237316782412562325%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166860237316782412562325&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-121978645-null-null.142v63control,201v3control_2,213v2t3_esquery_v1&utm_term=%E6%8C%87%E9%92%88%E6%95%B0%E7%BB%84&spm=1018.2226.3001.4187 -
问题4:在查找资料过程中,出现了数组指针和指针数组,二者的区别是什么?
-
问题4解决方案:指针数组:是指一个数组里面装着指针,也即指针数组是一个数组;数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已。
参考链接https://blog.csdn.net/wwwlyj123321/article/details/115480643?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166860254816800184197806%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166860254816800184197806&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-115480643-null-null.142v63control,201v3control_2,213v2t3_esquery_v1&utm_term=%E6%8C%87%E9%92%88%E6%95%B0%E7%BB%84%E5%92%8C%E6%95%B0%E7%BB%84%E6%8C%87%E9%92%88&spm=1018.2226.3001.4187和https://blog.csdn.net/mick_hu/article/details/100931034?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166860254816800184197806%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166860254816800184197806&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-100931034-null-null.142v63control,201v3control_2,213v2t3_esquery_v1&utm_term=%E6%8C%87%E9%92%88%E6%95%B0%E7%BB%84%E5%92%8C%E6%95%B0%E7%BB%84%E6%8C%87%E9%92%88&spm=1018.2226.3001.4187
其他
本周继续指针、数组、字符串、结构体等内容的学习,难度一直在增加,理解起来也有一定的困难,需要自己在课后再花时间来进行理解。同时,本周在作业系统上练习的过程中,也遇到了一些问题,对于将题目转化为代码的能力还需继续加强,多做题,多了解一些题型,有助于我们对所学知识的运用和掌握。对于数组之后的内容,我还需要迎难而上,加强理解和练习,一个问题一个问题地去解决。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 3/3 | 20/20 | |
第二周 | 90/90 | 2 / 5 | 7/27 | |
第三周 | 125/215 | 2 / 7 | 9 / 36 | |
第四周 | 270/ 485 | 2/9 | 9/45 | |
第五周 | 205/690 | 2/11 | 10/55 | |
第六周 | 225/915 | 4/15 | 10/65 | |
第七周 | 220/1135 | 1/16 | 10/75 | |
第八周 | 225/1360 | 1/17 | 8/83 | |
第九周 | 230/1590 | 1/18 | 9/92 | |
第十周 | 210/1800 | 1/21 | 9/101 | |
第十一周 | 220/2020 | 1/22 | 10/111 | |
第十二周 | 250/2270 | 1/23 | 10/121 |
-
计划学习时间:10小时
-
实际学习时间:10小时