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

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

时间:2024-11-24 21:14:11浏览次数:8  
标签:arr 20241319 int 元素 2024 2025 数组 ptr 指针

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09
这个作业的目标 操作系统责任 内存与进程管理 分时系统 CPU调度 文件、文件系统 文件保护 磁盘调度
作业正文 https://www.cnblogs.com/wchxx/p/18566368

教材学习内容总结

  1. 内存与进程管理

    • 内存管理:涉及内存的分配与回收,包括静态分配和动态分配。主要技术有分区分配、分页、分段和虚拟内存。
    • 进程管理:包括进程的创建、执行、同步、通信和终止。进程是操作系统进行资源分配和调度的基本单位。
    • 进程同步:确保多个进程在并发执行时能够协调一致,避免数据不一致和竞态条件。
    • 进程调度:决定哪个进程将获得CPU时间片,以实现多任务处理。
  2. 分时系统

    • 概念:允许多个用户同时使用计算机系统,每个用户感觉像是独占系统。
    • 调度:分时系统的CPU调度算法需要公平地分配CPU时间给各个用户进程。
    • 交互性:分时系统强调用户交互,提供快速响应。
  3. CPU调度

    • 调度算法:包括先来先服务(FCFS)、短作业优先(SJF)、轮转(RR)、优先级调度等。
    • 上下文切换:在进程间切换时保存和恢复CPU状态的过程。
    • 性能指标:如吞吐量、响应时间、周转时间等。
  4. 文件、文件系统

    • 文件概念:文件是数据的逻辑集合,文件系统是操作系统中用于管理文件的结构。
    • 文件操作:包括文件的创建、删除、读取和写入。
    • 目录结构:文件系统的层次结构,用于组织文件。
    • 文件存储:文件在磁盘上的存储方式,如连续分配、链表分配等。
  5. 文件保护

    • 访问控制:控制用户对文件的访问权限,如读、写、执行。
    • 完整性保护:确保文件不被未授权修改。
    • 保密性:保护文件内容不被未授权访问。
  6. 磁盘调度

    • 调度算法:如先进先出(FIFO)、最短寻道时间优先(SSTF)、扫描(SCAN)和循环扫描(C-SCAN)等。
    • 性能优化:减少磁盘寻道时间和旋转延迟,提高I/O效率。
  7. 数组名与指针

在C语言中,数组名可以被看作是一个指向数组第一个元素的指针。这意味着当你有一个数组时,你可以通过数组名来访问数组的第一个元素。例如:

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // ptr 现在指向 arr 的第一个元素

这里,arrptr 都指向同一个地址,即数组 arr 的第一个元素的地址。

  1. 访问数组元素

你可以通过指针算术来访问数组的元素。例如:

int value = *(ptr + 2); // 访问数组的第三个元素,等同于 arr[2]

这里,*(ptr + 2) 等同于 arr[2],因为 ptr 指向数组的开始,ptr + 2 移动到数组的第三个元素的地址,然后解引用得到该元素的值。

  1. 指针与数组遍历

你可以使用指针来遍历数组:

for (int *p = arr; p < arr + 5; p++) {
    printf("%d ", *p);
}

这个循环使用指针 p 遍历数组 arrp 从数组的开始移动到数组的结束。

  1. 多维数组与指针

对于多维数组,指针的使用稍微复杂一些,但概念是相似的。例如,对于一个二维数组:

int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

你可以将二维数组看作是指针的数组,每个指针指向一个一维数组:

int (*ptr)[4] = arr; // ptr 指向 arr 的第一个元素,即第一个一维数组

然后,你可以使用指针来访问二维数组的元素:

int value = *(*(ptr + 1) + 2); // 访问第二行第三列的元素,等同于 arr[1][2]

这里,*(ptr + 1) 指向第二个一维数组,*(ptr + 1) + 2 指向第二个一维数组的第三个元素,然后解引用得到该元素的值。

  1. 指针数组与数组指针
  • 指针数组:一个数组,其元素都是指针。
  • 数组指针:一个指针,它指向一个数组。

例如:

int *arrPtr[5]; // 指针数组,包含5个指向 int 的指针
int arr[5];    // 一个包含5个 int 的数组
int (*arrPtr2)[5] = &arr; // 数组指针,指向一个包含5个 int 的数组
  1. 函数参数中的数组和指针

当数组作为函数参数时,它实际上被传递为指向数组第一个元素的指针。因此,你可以在函数中通过这个指针来访问和修改数组的元素。

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

在这个函数中,arr 实际上是一个指针,指向传入的数组的第一个元素。

教材中遇到的问题及解决

在学习C语言中的数组和指针时,你可能会碰到以下一些常见问题及其解答:

问题1:如何正确地遍历二维数组?

解答
二维数组可以看作是数组的数组,或者指针的数组。在C语言中,遍历二维数组通常有两种方式:

int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

// 方法1: 使用嵌套循环
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%d ", arr[i][j]);
    }
}

// 方法2: 使用指针
int (*row)[4] = arr; // row 指向一个包含4个int的数组
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%d ", (*row)[j]);
    }
    row++; // 移动到下一行
}

问题2:如何将数组作为参数传递给函数?

解答
在C语言中,数组作为参数传递给函数时,实际上是传递数组首元素的地址。因此,函数接收到的是一个指针。为了在函数中使用数组,你需要知道数组的大小。

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

int main() {
    int myArray[5] = {1, 2, 3, 4, 5};
    printArray(myArray, 5); // 传递数组和大小
    return 0;
}

问题3:指针数组和数组指针有什么区别?

解答
指针数组是一个数组,其元素都是指针,而数组指针是一个指针,它指向一个数组。

int *ptrArray[10]; // 指针数组:一个包含10个int指针的数组
int arr[10];
int (*arrayPtr)[10] = &arr; // 数组指针:一个指向包含10个int的数组的指针

问题4:如何动态分配一个二维数组?

解答
动态分配二维数组通常需要两步:首先分配行,然后为每一行分配列。

int **allocate2DArray(int rows, int cols) {
    int **array = malloc(rows * sizeof(int*)); // 分配行指针
    for (int i = 0; i < rows; i++) {
        array[i] = malloc(cols * sizeof(int)); // 为每行分配列
    }
    return array;
}

void free2DArray(int **array, int rows) {
    for (int i = 0; i < rows; i++) {
        free(array[i]); // 释放每行
    }
    free(array); // 释放行指针
}

基于AI的学习




标签:arr,20241319,int,元素,2024,2025,数组,ptr,指针
From: https://www.cnblogs.com/wchxx/p/18566368

相关文章

  • [20241121]测试软软解析遇到的疑惑.txt
    [20241121]测试软软解析遇到的疑惑.txt--//测试软软解析遇到的疑惑,就是大量软软解析以及分散执行两者的执行时间差别并不是很大,有点疑惑,展开分析看看。1.环境:SCOTT@book01p>@ver2==============================PORT_STRING                  :x86_64/Linux......
  • [20241123]11g下测试遇到latch shared pool等待事件问题.txt
    [20241123]11g下测试遇到latchsharedpool等待事件问题.txt--//这是昨天测试遇到的问题,实际上以前也遇到,没有仔细探究。以前的方法就是启动后做小量延迟,规避这个问题,实际上还是出现。--//这次测试我总感觉哪里做的不对,仔细分析看看。1.环境:SCOTT@book>@ver1PORT_STRING    ......
  • 【MX-S7】梦熊 NOIP 2024 模拟赛 3 & SMOI Round 2(同步赛)
    【MX-S7】梦熊NOIP2024模拟赛3&SMOIRound2(同步赛)\(T1\)luoguP11323【MX-S7-T1】「SMOI-R2」HappyCard\(20pts\)发现可以把「炸弹」也看做「三带一」。先使用「三带一」带走原用于出「单牌」的牌,若「三带一」还有剩余则尝试带走原用于出「对子」的牌,否则直接......
  • 2024.11.24 鲜花
    一些大概有用的东西hello(bpm)2024翻洛谷科技·工程翻到的,大概有点用。大量参考洛谷日报。负数下标数组int_f[N],*constf=_f+(N>>1);不解释。valarray挺强的,但常数也不小。定义类似vector,但是是固定长,可以用.resize(n,t=T())重设大小,但是会清空。类似bitset,......
  • Toyota Programming Contest 2024#11(AtCoder Beginner Contest 379)
    A-Cyclic链接:A-Cyclic代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){ stringss; cin>>ss; cout<<ss[1]<<ss[2]<<ss[0]<<""<<ss[2]<<ss[0]<<ss[1]; return0;}B-Strawberri......
  • 2024-2025-1 20241311 《计算机基础与程序设计》第九周学习总结
    学期2024-2025-1学号20241311《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程<班级的链接>2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第九周作业)这个作业的目标<写上具体......
  • 『模拟赛』【MX-S7】梦熊NOIP2024模拟赛3
    Rank因为提前知道打不完就没打暴力A.【MX-S7-T1】「SMOI-R2」HappyCardlink。签。比较好想到炸弹等价于三带一,因此本质只有三种出牌类型。并且三带一一次能出掉四张牌,显然优先打三带一是很优的。所以我们处理出三带的个数以及剩下零牌中对子的个数,然后分讨。如果三带......
  • 20222317 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:①DNS注册人及联系方式②该域名对应IP地址③IP地址注册人及联系方式④IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所......
  • 2024/11/24 链表
    链表1.类型(1)单链表(2)双链表(3)循环链表2.链表在内存的存储方式数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。链表是通过指针域的指针链接在内存中各个节点。3.链表的定义定义......
  • 2024-2025-1 学号:20241301 《计算机基础与程序设计》第九周学习总结
    |这个作业属于哪个课程|2024-2025-1-计算机基础与程序设计||这个作业要求在哪里|2024-2025-1计算机基础与程序设计第一周作业||这个作业的目标|<复习知识,巩固基础>||作业正文|https://www.cnblogs.com/HonJo/p/18566259|一、教材学习内容总结(一)指针与数组在C语言中,指针和数......