2024-2025-1 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]的指针。
- 在C语言中,数组名可以被看作是一个指针常量,它指向数组的第一个元素。例如,对于数组
- 通过指针访问数组元素
- 可以使用指针来访问数组元素。例如:
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指针的数组,分别指向b、c和d。
- 应用 - 字符串数组
- 指针数组常用于处理字符串数组。例如:
char *strs[] = {"apple", "banana", "cherry"}; for (int i = 0; i < 3; i++) { printf("%s\n", strs[i]); }- 这里
strs是一个字符串指针数组,通过遍历可以输出每个字符串。
4. 动态数组
- 动态内存分配函数
- C语言中通过
malloc、calloc和realloc函数来进行动态内存分配。 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) { // 内存重新分配失败处理 } - C语言中通过
- 动态数组的使用优势
- 动态数组可以根据程序运行时的实际需求来分配内存,避免了静态数组在编译时就确定大小的局限性,提高了内存的利用率。
教材学习中的问题和解决过程(先问 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 |
------------恢复内容结束------------

浙公网安备 33010602011771号