首页 > 编程语言 >2024-2025-1 20241305《计算机基础与程序设计》第十二周学习总结

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

时间:2024-12-14 16:20:29浏览次数:5  
标签:指向 int 元素 2024 2025 二维 数组 20241305 指针

------------恢复内容开始------------

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十二周作业
这个作业的目标 指针和数组
作业正文 本博客链接

教材学习内容总结

《C语言程序设计》第十一章 指针与数组 内容总结:

1. 指针和一维数组的关系

  • 数组名与指针
    • 在C语言中,数组名可以被看作是一个指针常量,它指向数组的第一个元素。例如,对于数组int a[5];a等同于&a[0],即a是指向a[0]的指针。
  • 通过指针访问数组元素
    • 可以使用指针来访问数组元素。例如:
    int a[5] = {1, 2, 3, 4, 5};
    int *p = a;
    printf("%d", *p);  // 输出1,即a[0]
    p++;
    printf("%d", *p);  // 输出2,即a[1]
    
    • 这里p是一个指向int类型的指针,通过p++可以顺序访问数组中的元素。

2. 指针和二维数组的关系

  • 二维数组的存储方式
    • 二维数组在内存中是按行顺序存储的。例如int a[2][3];在内存中的存储顺序是a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]
  • 指向二维数组的指针
    • 可以定义一个指针指向二维数组。例如:
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*p)[3] = a;
    printf("%d", *(*p + 1));  // 输出2,即a[0][1]
    
    • 这里p是一个指向包含3个int类型元素的数组的指针。通过*(*p + 1)可以访问二维数组中的元素。

3. 指针数组及其应用

  • 指针数组的定义
    • 指针数组是一个数组,其元素为指针类型。例如:
    int *a[3];
    int b = 1, c = 2, d = 3;
    a[0] = &b;
    a[1] = &c;
    a[2] = &d;
    
    • 这里a是一个包含3个int指针的数组,分别指向bcd
  • 应用 - 字符串数组
    • 指针数组常用于处理字符串数组。例如:
    char *strs[] = {"apple", "banana", "cherry"};
    for (int i = 0; i < 3; i++) {
        printf("%s\n", strs[i]);
    }
    
    • 这里strs是一个字符串指针数组,通过遍历可以输出每个字符串。

4. 动态数组

  • 动态内存分配函数
    • C语言中通过malloccallocrealloc函数来进行动态内存分配。
    • malloc函数:例如,分配一个包含5个int类型元素的动态数组:
    int *a = (int *)malloc(5 * sizeof(int));
    if (a == NULL) {
        // 内存分配失败处理
    }
    
    • calloc函数:除了分配内存,还会将内存初始化为0。例如:
    int *b = (int *)calloc(5, sizeof(int));
    
    • realloc函数:用于重新分配内存大小。例如,将上述a所指向的内存空间扩大:
    a = (int *)realloc(a, 10 * sizeof(int));
    if (a == NULL) {
        // 内存重新分配失败处理
    }
    
  • 动态数组的使用优势
    • 动态数组可以根据程序运行时的实际需求来分配内存,避免了静态数组在编译时就确定大小的局限性,提高了内存的利用率。

教材学习中的问题和解决过程(先问 AI)

一、指针和二维数组在内存中是如何存储的?
解答:这是个很好的问题。在内存中,二维数组是按行顺序存储的。

比如说有一个二维数组int a[2][3],它在内存中的存储顺序就像是把这个二维数组“展开”成一个一维数组一样。先是存储第一行的元素a[0][0]a[0][1]a[0][2],然后紧接着存储第二行的元素a[1][0]a[1][1]a[1][2]

从指针的角度来看,如果我们把二维数组的名字(比如a)看作是一个指针,这个指针指向的是二维数组的第一行(也就是第一个包含3个int类型元素的数组)。如果我们对这个指针进行算术运算,比如a + 1,它会根据二维数组的列数(这里是3)来计算偏移量,实际上会跳过第一行的3个元素,指向下一行(也就是第二个包含3个int类型元素的数组)。

二、什么是指针的偏移?
解答:指针偏移是指改变指针所指向的内存位置。

在C语言中,当我们有一个指针,比如int *p;,假设p当前指向一个内存地址,p++就是一种指针偏移操作。因为p是指向int类型的指针,p++会让p指向的地址增加sizeof(int)个字节。

对于数组来说,这种指针偏移就很有用。例如有一个一维数组int arr[5] = {1, 2, 3, 4, 5};int *p = arr;,最初p指向arr[0],当我们执行p++时,p就会指向arr[1],这是因为p的偏移量是根据int类型的大小来计算的。

对于二维数组,指针偏移会更复杂一点。假设有一个二维数组int a[2][3]int (*p)[3] = a;,这里p是一个指向包含3个int类型元素的数组的指针。当我们执行p++时,p会跳过一行(也就是3个int元素),指向二维数组的下一行。

基于AI的学习




代码调试中的问题和解决过程

问题一:ojCP1296输出元音字母个数的问题,自己交上的代码总显示部分接受
解决:自己发现每个字母输出一次即可,而自己的代码会使同一个元音字母输出多次

问题二:结构体编程题按成绩高低排序
解决:不能将所有结构体中声明的变量轮番呼唤,要换结构体变量的下标,否则程序运行不起来,而且改后更简单明了

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第十二周 600/3600 2/17 15/210
计划学习时间:20h
实际学习时间:20h

------------恢复内容结束------------

标签:指向,int,元素,2024,2025,二维,数组,20241305,指针
From: https://www.cnblogs.com/yaohang/p/18606867

相关文章

  • Threejs教程,2024全新系统threejs入门教程
    Threejs教程,2024全新系统threejs入门教程https://www.bilibili.com/video/BV1Zm421g7oi/?spm_id_from=333.999.0.02401-theejs三要素WebGL顶点数据顶点索引矩阵三要素场景Scene容器相机Camera观察渲染器Renderer组合透视相机(PerspectiveCamera)http://www.we......
  • 2024年全网最新最详细《WebGL教程》
    2024年全网最新最详细《WebGL教程》https://www.bilibili.com/video/BV1AS411A74T/1202-canvas的基础知识https://bx2eq6ulg18.feishu.cn/docx/I4hTdO95qozPBOxauPlcbDfInVd2.1获取渲染上下文HTMLCanvasElement.getContext()方法用于返回绘图上下文对象,绘图上下文对象是2D上......
  • flutter零基础教程: Dart 3.5语法 flutter3.24 2024年8月27日更新
    flutter零基础教程:Dart3.5语法flutter3.242024年8月27日更新https://www.bilibili.com/video/BV1RZ421p7BL7 142024-8edu.51cto.com/course/36476.htmlP1课程大纲介绍P2002课程使用方法介绍和笔记使用P3003_mac系统查看笔记软件的安装方法和…..P4004黑苹果系统的......
  • 2024-2025-1 学号20241315《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标<写上具体方面>《C语言程序设计》第11章并完成云班课测试作业正文https://www.cnblogs......
  • 2024-2025-1 20241318 《计算机基础与程序设计》第十二周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标<自学教材《C语言程序设计》第11章并完成云班课测试>||作业正文|https://i.cnblogs.com/p......
  • nuxt3教程 2024年7月
    nuxt3教程2024年7月https://www.bilibili.com/video/BV11W421R7nC 1 2前置-一集搞明白客户端渲染和服务端渲染,多页面开发和spa单页面开发1安装介绍2服务端和客户端3基础配置4区分server和client,调试nuxt5路由的基本使用6命名路由,可选路由,全局路由7嵌套路由8编程......
  • NOIP2024
    T1显然,若\(t[l,r]\)均为\(\texttt1\),会让\(s[l,r]\)可以任意重排。从左到右按位匹配,考虑让一位匹配的代价,可能会让其后面缺少一个数进行匹配,也就是后面的答案最多减少\(1\)。而匹配一位已经有了\(1\)的贡献,故贪心匹配一定不劣。预处理后暴力匹配即可,附上赛时代码。#in......
  • 【2024年最受欢迎Angular课程】零基础自学的前端框架完整版教程
    【2024年最受欢迎Angular课程】零基础自学的前端框架完整版教程https://www.bilibili.com/video/BV1FZ42127cd/ 1-1015+1901、angular介绍angular.cnngserve--openvite...angular112.2主要特性1.AngularCLI可以快速搭建框架,创建module,service,class,directive等2......
  • 特斯拉 Model Y 2022 款与 2024 款置换评估报告--多个AI对话模型能力测评报告
    特斯拉ModelY2022款与2024款置换评估报告题目:车主买modelY2022款花了280900元,贷款5年,首付是130000元,五年贷款有利息,月缴费是3072元,缴费了25个月,该车还贴了7242车身膜,2000的玻璃膜,第三方评估价值160000元,偿还招商银行的未还的金额后剩余的钱可以用来当新款的首付,考......
  • 2024.12.13 周五
    2024.12.13周五Q1.1000Polycarphasaproblem—hislaptopkeyboardisbroken.Now,whenhepressesthe'b'key,itactslikeanunusualbackspace:itdeletesthelast(rightmost)lowercaseletterinthetypedstring.Iftherearenolowercase......