首页 > 其他分享 >2023-2024-1 学号20231315第十二周学习总结

2023-2024-1 学号20231315第十二周学习总结

时间:2023-12-17 18:11:06浏览次数:31  
标签:arr 函数 学号 int 20231315 2024 内存 数组 指针

学期:2023-2024-1 学号:20231315《计算机基础与程序设计》第十二周学习总结

作业信息

这个作业属于哪个课程 2023-2024-1 《计算机基础与程序设计》
这个作业要求在哪里 2023-2024-1 《计算机基础与程序设计》
这个作业的目标 学习《C语言程序设计》第11章
作业正文 https://i.cnblogs.com/posts/edit;postId=17909486

教材学习内容总结

本周我自学了《C语言程序设计》第11章的相关内容,对教材进行了总结。

《C语言程序设计》第11章总结

第11章主要介绍了指针和一堆数组的关系,指针和二堆数组的关系,向函数传递一堆和二堆数组,指针数组以及动态数组。

教材学习中遇到的问题

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

  1. p+1与p++有什么区别?

    p+1和p++是两种不同的操作。

    p+1是将指针p向后移动1个字节,即p当前所指的地址加上1个字节的地址偏移量,得到一个新的地址。

    p++是指针p自增1,也就是将p所存储的地址自增1个字节,但是p++表达式的值仍然是原来p指向的地址。

    因此,p+1和p++的区别在于,前者返回的是一个新的地址,而后者返回的是原指针指向的地址,并且会将指针本身的值自增1。

  2. 如何在函数中引用二堆数组并举例

    #include <stdio.h>

    // 函数中引用二维数组
    void printArray(int (*arr)[3], int row, int col)

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

    {
    for (int j = 0; j < col; j++)

    {
    printf("%d ", arr[i][j]);
    }
    printf("\n");
    }
    }

    int main()

    {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};


    printArray(arr, 2, 3);

    return 0;
    }

  3. 如何用指针表示二堆数组?

    二维数组在内存中是连续存储的,因此可以使用指针来表示数组的首地址,然后通过指针进行遍历和操作。

    下面是一个简单的示例,演示了如何使用指针表示二维数组:#include <stdio.h>

    int main()

    {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptr)[3];

    ptr = arr;

    for (int i = 0; i < 2; i++)

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

    { printf("%d ", *(*(ptr + i) + j));

    }

    printf("\n");

    }

    return 0;

    }

    在这个示例中,我们定义了一个二维数组arr,然后定义了一个指向包含3个整数的数组的指针ptr。我们将数组arr的地址赋值给指针ptr。然后,我们使用指针ptr来访问

  4. 该用哪些函数动态分配内存?

    在C语言中,可以使用以下函数动态分配内存:

    malloc函数:用于分配指定大小的内存块,返回一个指向该内存块的指针。

    calloc函数:用于分配指定数量和大小的内存块,返回一个指向该内存块的指针。与malloc不同的是,calloc会将分配的内存块初始化为零。

    realloc函数:用于重新分配已经分配的内存块的大小,返回一个指向该内存块的指针。如果需要扩大内存块,则会在原有的内存块末尾添加新的内存;如果需要缩小内存块,则会截取原有内存块的一部分。注意,使用realloc函数时,必须先使用malloccalloc函数分配内存。

    这些函数都需要传递一个参数,即所需内存块的大小(以字节为单位),并返回一个指向该内存块的指针。例如,要分配一个包含10个整数的数组,可以使用如下代码:

    int* arr = (int*)malloc(10 * sizeof(int));

    上述代码将分配包含10个整数的内存块,并返回一个指向该内存块的指针。需要注意的是,malloc函数返回的指针类型是void*,因此需要进行强制类型转换。

    在使用完分配的内存块后,必须使用free函数将其释放,以便操作系统可以回收该内存。例如,要释放上面示例中分配的内存块,可以使用如下代码:

    free(arr);

    注意,在释放内存块之前,一定要确保不再需要使用该内存块,否则可能导致内存泄漏或程序崩溃等问题。

  5. 没有释放内存会产生哪些危害?

    如果没有正确释放动态分配的内存,会导致以下危害:

    内存泄漏:未释放的内存将无法再被程序使用,而且无法被操作系统回收。如果内存泄漏发生在循环中或重复执行的代码段中,每次迭代都会分配新的内存而不释放旧的内存,最终会耗尽可用内存,导致程序崩溃或变得非常缓慢。

    内存溢出:如果程序反复分配内存而不释放,最终可能会耗尽系统的可用内存资源,导致程序崩溃或操作系统无法正常工作。

    资源泄漏:除了内存之外,还有其他资源(如文件句柄、网络连接等)也可能会泄漏。如果不适时释放这些资源,会导致系统资源的浪费,可能会使系统性能下降或无法处理更多的请求。

    不可预测的行为:当未释放的内存被访问时,程序可能会产生未定义的行为。这种行为包括读取到无效数据、程序崩溃、数据损坏等。这是因为其他程序或操作系统可能会使用未释放的内存块,导致数据不一致或冲突。

    为了避免以上问题,务必在不再需要动态分配的内存块时,使用free函数进行释放。释放内存的原则是:每次调用malloccallocrealloc函数后,都应该有对应的free调用来释放已分配的内存块。这样可以保证内存的正确管理和有效利用。

    基于AI的学习

    我:我学习了本周我自学了《C语言程序设计》第11章的相关内容,并对教材进行了总结。请以苏格拉底的方式对我提问

AI:那么,请你分享一下你学习《C语言程序设计》第11章的相关内容的总结吧

我:第11章主要介绍了指针和一堆数组的关系,指针和二堆数组的关系,向函数传递一堆和二堆数组,指针数组以及动态数组。

AI :在学习了《C语言程序设计》第11章的指针和数组相关内容后,你对指针和数组的关系有什么深刻的理解呢?同时,在使用指针和数组时,有哪些需要特别注意的地方呢?请你分享一下你的见解。。

我:指针和数组在C语言中有着密切的关系,理解它们之间的联系对于编写高效、灵活的程序至关重要。我的理解是,指针和数组的关系体现在以下几个方面:

  1. 内存地址:数组名代表了数组元素的起始地址,而指针也存储了变量或者数组元素的内存地址。因此,可以将数组名视为指向数组首元素的指针,这意味着可以通过指针来访问数组元素。
  2. 数组名与指针的差异:虽然数组名可以被视为指向数组首元素的指针,但是数组名有其特殊性,例如不能被赋值,而指针可以被重新赋值指向不同的内存地址。
  3. 指针算术运算:利用指针进行算术运算可以实现对数组元素的遍历和访问,这在处理数组时非常有用。通过加法运算,可以让指针指向数组中的下一个元素,实现便捷的遍历操作。

在使用指针和数组时,需要特别注意以下几点:

  1. 越界访问:在使用指针和数组时,一定要避免越界访问,否则会导致未定义的行为,甚至引发程序崩溃。因此,需要在编程中保证指针和数组的访问始终在有效范围内。
  2. 空指针和野指针:在使用指针时,一定要注意指针的初始化和赋值,避免出现空指针和野指针的情况,以免引发程序错误。
  3. 内存泄漏:当使用动态内存分配函数如malloc()时,一定要及时释放内存,避免出现内存泄漏问题。

总的来说,指针和数组在C语言中有着紧密的联系,合理地应用指针可以提高程序的效率和灵活性,但同时也需要特别注意内存访问的安全性和合理性,以确保程序的稳定性和可靠性。

代码行数(新增/累积 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 200/250 4/4 20/25
第五周 300/300 3/3 20/20

以上是本周的学习进度条,我在代码行数、博客数量和学习时间上都有一定的增长,但仍需努二

标签:arr,函数,学号,int,20231315,2024,内存,数组,指针
From: https://www.cnblogs.com/xisngsiyuan/p/17909486.html

相关文章

  • THUPC2024 游记
    大约是进复赛了,那就写个游记吧。队伍名:福州一树开车大队。队伍组成:CTTDay349.64分选手,noip260分的候选队,NOI2022E类铁牌获得者。2023.12.17(初赛)原定策略是我做模3余0的题,lzq做模3余1的题,lhr做模3余2的题。一开场我有点重量级的,对着C做了1h发现不会......
  • THUPC2024初赛 游记
    队伍组成:\(\textJ\color{red}{\text{ijidawang}}\),负责切题;\(\textK\color{red}{\text{8He}}\),负责切题;\(\color{#008000}{\text{x383494}}\),负责拖后腿。Day-1之前组的一个队队长突然没法打比赛,正好看到\(\textJ\color{red}{\text{ijidawang}}\)的队伍缺人,就组了。D......
  • 「比赛游记」THUPC2024 初赛游记
    「比赛游记」THUPC2024初赛游记路上小心ずっと探してた捧げた心臓の在処(我一直在寻找着曾献出的心脏如今何在)本当の想いを教えて夢物語でいいから(告诉我你真实的想法吧纵使如梦话般缥缈)最後になにがしたい?どこに行きたい?(在这最后一刻你还想要做什么?你还想去向何方?)......
  • 2023-2024 20231404高伟光《计算机基础与程序设计》第十二周学习总结
    作业信息作业内容我的班级我的班级作业要求第十二周要求作业目标学习c语言中结构体和基础的数据结构作业正文此博客教材内容总结c语言程序设计第十二章中主要讲了结构体的定义,使用方法还有结构体指针的相关用法.以结构体为基础,衍生讲了联合体和枚......
  • 2023-2024-1 20232329易杨文轩《网络空间安全导论》第六周学习
    学期2023-2024-1学号:20232329《#学期2023-2024-1学号20232329《网络》第六周学习总结》教材学习内容总结教材学习中存在的问题和解决过程问题1:什么是半虚拟化?问题1解决方案:问题2:三种云计算的服务模型有什么区别?问题2解决方案:基于AI的学习参考资料[......
  • THUPC2024记
    算法竞赛打THUPC,就像,只能度过一个相对失败的人生。本来周末理综考得稀烂就急,这下打完THUPC就更急了。不知道啥时候我们队就凑齐了,然后不知道啥时候就直接要比赛了。本来分的是ljc先开ABCD,我开EFGH,lty开IJKLM。结果开场一个“M是签到,但是我不会”给我弄傻了,看一眼题......
  • 2023-2024-1 20232315 《网络空间安全导论》第六周学习总结
    一、教材学习内容总结近一周我预习了第六章应用安全基础,了解了相关知识,下面本章思维导图: 二、教材学习中的问题和解决过程问题一:虚拟化主要有哪些方式解决方法:百度搜索总结答案:虚拟化有很多实现方式,比如:根据虚拟化的程度和级别,有软件虚拟化和硬件虚拟化,全虚拟化和半虚拟......
  • 2023-2024-1 20232322罗上林 《网络》第六周学习总结
    教材学习内容总结教材学习中的问题和解决过问题一:不理解半虚化的含义问题一解决方案:询问百度得知半虚拟化和全虚拟化的区别是什么?二者一字之差,但是实质却大不相同。两者不同点在于通过是否改变操作系统内核设置,目的都是为了实现虚拟化。一般Xen虚拟机包含了完全虚拟化(fullvir......
  • 2023-2024-1 20231417 《计算机基础与程序设计》第十二周学习总结
    2023-2024-120231417《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业这个作业的目标《C语言程序设计》第11章作业正文 https://www.......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业)这个作业的目标自学《C语言程序设计》第11章作业正文https://www.cnblogs.com/lsrmy/p/17908985.html教材学......