11.03学习

一、主函数和exit函数

主函数( main 函数)

1. 入口点: main 函数是C程序的入口点,程序执行从这里开始。

2. 返回类型: main 函数可以返回 int 类型,也可以返回 void 类型。但在现代C语言标准(C99及以后)中,推荐使用 int 类型。

3. 参数: main 函数可以接受两个参数,通常定义为 int argc 和 char *argv[] 。 argc 表示命令行参数的数量, argv 是一个字符串数组,包含每个参数的具体值。

4. 返回值: main 函数的返回值通常用来表示程序的退出状态。返回 0 通常表示程序成功执行,非 0 值表示出现了错误或异常。

5. 示例:int main() {

// 程序代码

return 0;

}

 

 

 exit 函数

1. 终止程序: exit 函数用于立即终止程序的执行。

2. 头文件:使用 exit 函数需要包含头文件 <stdlib.h> 。

3. 参数: exit 函数接受一个 int 类型的参数,用来表示程序的退出状态。

4. 返回值: exit 函数不返回任何值。

5. 示例:#include <stdlib.h>

 

int main() {

// 程序代码

exit(0); // 正常退出

}

其他知识点

程序终止:除了 exit 函数外, main 函数执行完毕后也会自动终止程序。

资源清理:在 exit 函数被调用之前,程序应该释放所有已分配的资源,如内存、文件句柄等。

信号处理:在某些情况下,程序可能因为接收到信号(如 SIGINT )而终止。可以通过信号处理函数来控制程序的退出行为。

环境清理:在程序退出之前,C运行时库会执行一些清理工作,如关闭所有打开的文件、调用注册的`ate

 

 

二、多文件编程相关知识点

C语言中的多文件编程是一种常见的编程实践,它允许将程序分解成多个源文件和头文件,以提高代码的可读性、可维护性和可重用性。

1. 源文件(.c文件):

包含实际的C代码和函数实现。

每个源文件可以包含多个函数的定义。

2. 头文件(.h文件):

包含函数声明、宏定义、类型定义和全局变量声明。

用于在不同的源文件之间共享接口和公共定义。

通常使用 #ifndef 、 #define 和 #endif 预处理指令来防止头文件内容被多次包含(头文件保护)。

3. 编译单元:

每个源文件及其对应的头文件构成一个编译单元。

编译器独立编译每个编译单元,然后链接器将它们链接成一个可执行文件。

4. 函数声明:

在头文件中声明函数,以便在其他源文件中调用这些函数。

函数声明告诉编译器函数的名称、返回类型和参数类型。

5. 外部链接:

使用 extern 关键字声明全局变量或函数,使其可以在其他文件中访问。

一个文件中声明为 extern 的变量或函数,必须在另一个文件中定义。

6. 静态链接:

链接器将不同的编译单元链接成一个单一的可执行文件。

静态链接发生在程序编译时,所有需要的库和代码都被包含在最终的可执行文件中。

7. 静态库和动态库:

静态库(.a文件):在编译时将库的内容复制到可执行文件中。

动态库(.so文件在Linux,.dll文件在Windows):在程序运行时动态加载库。

8. 编译和链接命令:

使用编译器(如gcc或clang)编译源文件。

使用链接器(如ld)链接目标文件生成可执行文件。

示例命令:gcc -c file1.c file2.c # 编译源文件生成目标文件

gcc file1.o file2.o -o program # 链接目标文件生成可执行文件

9. 模块化:

将程序分解成模块,每个模块负责特定的功能。

模块化有助于代码的组织和重用。

10. 依赖管理:

确保头文件和源文件之间的依赖关系正确,避免循环依赖。

使用 #include 指令包含所需的头文件。

11. 代码组织:

将相关的函数和数据组织在同一个文件中,以便于理解和维护。

12. 代码风格和规范:

遵循一致的代码风格和命名规范,以提高代码的可读性。

13. 错误处理:

在多文件编程中,确保每个模块都能正确处理错误,并在必要时向上层模块传递错误信息。

 

 

三、数组逆转相关知识点

在C语言中,数组逆转(也称为数组反转)是指将数组中的元素顺序颠倒,使得第一个元素变成最后一个,第二个元素变成倒数第二个,以此类推。

1. 理解数组:

数组是相同数据类型元素的集合,存储在连续的内存位置。

数组可以是一维或多维。

2. 数组长度:

逆转数组前,需要知道数组的长度,这可以通过传递数组大小参数或使用 sizeof 运算符计算得出。

3. 指针操作:

通过指针可以访问和修改数组元素。

可以使用指针来遍历数组并交换元素。

4. 交换元素:

要逆转数组,需要交换数组的首尾元素,然后向中心移动,继续交换相邻的元素,直到到达数组的中心。

5. 循环控制:

使用循环结构(如 for 循环)来控制元素的交换过程。

循环终止条件通常是到达数组的中间位置。

6. 临时变量:

在交换两个元素时,通常需要一个临时变量来保存其中一个元素的值。

7. 原地逆转:

数组逆转可以在原数组上进行,不需要额外的存储空间。

8. 函数封装:

将逆转逻辑封装在一个函数中,以提高代码的可重用性和模块化。

9. 边界条件:

考虑空数组或只有一个元素的数组的情况,这些情况下不需要进行任何操作。

10. 代码示例:

void reverseArray(int arr[], int n) {

int temp;

for (int i = 0; i < n / 2; i++) {

temp = arr[i];

arr[i] = arr[n - i - 1];

arr[n - i - 1] = temp;

}

}

11. 递归方法:

除了迭代方法,也可以使用递归来实现数组的逆转。

12. 多维数组:

对于多维数组,逆转操作可能需要更复杂的逻辑,可能需要逐行或逐列进行逆转。

13. 性能考虑:

原地逆转算法的时间复杂度为O(n/2),即O(n),其中n是数组的长度。

14. 稳定性:

逆转操作不涉及比较,因此它是稳定的,不会改变相同元素的相对顺序。

15. 测试:

对逆转函数进行充分的测试,包括边界条件和典型案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463840.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AprilTag在相机标定中的应用简介

1. AprilTag简介 相机标定用的标靶类型多样,常见的形式有棋盘格标靶和圆形标靶。今天要介绍的AprilTag比较特别,它是一种编码形式的标靶。其官网为AprilTag,它是一套视觉基准系统,包含标靶编解码方法(Tag生成)和检测算法(Tag检测),可用于AR、机器人、相机标定等领域。…

Qt报错QOCI driver not loaded且QOCI available的解决方法

参考 Linux Qt 6安装Oracle QOCI SQL Driver插件&#xff08;适用WSL&#xff09; 安装 QOCI 插件完成后运行 Qt 项目报错&#xff1a; qt.sql.qsqldatabase: QSqlDatabase: QOCI driver not loaded qt.sql.qsqldatabase: QSqlDatabase: available drivers: QMIMER QPSQL QODBC…

【MySQL】 穿透学习数据库理论与知识剖析

前言&#xff1a;本节内容讲述一些数据库的基本概念。 第一个部分就是数据库相关的概念&#xff0c; 比如什么是数据库&#xff0c; 如何理解mysqld以及mysql。第二部分理解数据库和表在系统层面的形式。 第三部分就是mysql的一些操作分类。 第四部分就是数据库的插件配置这些。…

Web Broker(Web服务应用程序)入门教程(1)

1、介绍 Web Broker 组件&#xff08;位于工具面板的“Internet”选项卡中&#xff09;可以帮助您创建与特定统一资源标识符&#xff08;URI&#xff09;相关联的事件处理程序。当处理完成后&#xff0c;您可以通过编程方式构建 HTML 或 XML 文档&#xff0c;并将它们传输给客…

网络安全法详细介绍——爬虫教程

目录 [TOC](目录)一、网络安全法详细介绍1. 网络安全法的主要条款与作用2. 网络安全法与爬虫的关系3. 合法使用爬虫的指南 二、爬虫的详细教程1. 准备环境与安装工具2. 使用requests库发送请求3. 解析HTML内容4. 使用robots.txt规范爬虫行为5. 设置请求间隔6. 数据清洗与存储 三…

25国考照片处理器使用流程图解❗

1、打开“国家公务员局”网站&#xff0c;进入2025公务员专题&#xff0c;找到考生考务入口 2、点击下载地址 3、这几个下载链接都可以 4、下载压缩包 5、解压后先看“使用说明”&#xff0c;再找到“照片处理工具”双击。 6、双击后会进入这样的界面&#xff0c;点击&…

Go 语言之搭建通用 Web 项目开发脚手架

Go 语言之搭建通用 Web 项目开发脚手架 MVC 模式 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&…

江协科技STM32学习- P34 I2C通信外设

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤&#xff1a; 一、环境准备 机器配置 确保两台机器&#xff08;假设为服务器 A 和服务器 B&#xff09;能够互相通信&#xff0c;例如它们在同一个局域网内&#xff0c;并且开放了 MySQL 通信所需的端口&#xff08;默认是 …

【MIT-OS6.S081笔记1】xv6环境搭建

最近开始做一个操作系统的神课MIT-OS6.S081&#xff0c;我做的是老版本的2020版本的&#xff0c;环境使用的是VirtualBox的Ubuntu系统&#xff0c;在这里记录一下学习的过程。首先需要搭建一下环境&#xff0c;参考官网Tools Used in 6.S081&#xff0c;这个知乎文章也写得很好…

深度学习基础—语言模型和序列生成

引言 深度学习基础—循环神经网络&#xff08;RNN&#xff09;https://blog.csdn.net/sniper_fandc/article/details/143417972?fromshareblogdetail&sharetypeblogdetail&sharerId143417972&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上…

kdd比赛方案

解决方案概述 采用两阶段的方法来解决比赛任务。在第一阶段&#xff0c;采用与 SciBERT 集成的跨编码器模型来确定源论文是否是最重要的参考文献之一。在第二阶段&#xff0c;利用了从目标和源论文中得出的特征&#xff0c;以及第一阶段的输出&#xff0c;输入到几个二进制分类…

抖音Ai图文故事号,AI一键生成故事图片变现,涨粉变现超快!

今天分享2个简单好上手&#xff0c;可批量复制&#xff0c;出单超快的Ai项目&#xff0c;那就是AI绘画壁纸号Ai图文故事号。 在抖音、小红书上&#xff0c;壁纸号火的一塌糊涂&#xff0c;新号3天涨粉1500&#xff0c;变现利润超过了4位数 壁纸看起来平平无奇&#xff0c;市场需…

面试题:JVM(三)

1. 面试题 说一说JVM的内存结构是什么样子的,每个区域放什么&#xff0c;各有什么特点&#xff1f;&#xff08;快手、搜狐&#xff09; JVM的内存结构&#xff0c;及各个结构的内容。&#xff08;vivo&#xff09; 详细介绍一下内存结构&#xff08;墨迹天气&#xff09; JVM…

ELK的ElasticStack语法

目录 传送门前言一、索引&#xff08;数据库&#xff09;1、创建索引2、获取索引3、删除索引 二、文档&#xff08;Row行&#xff09;1、创建文档2、获取文档3、修改文档4、删除文档5、高级查询&#xff08;精辟&#xff09;条件查询分页、指定、排序、范围查询全文检索、分组查…

leaflet绘制圆形方案

电子围栏绘制方案: 采用leaflet绘制电子围栏 可以看对应api文档 。原生是英文,所以要重定义,直接覆盖下面的 leaflet.draw-cn.js 文件L.drawLocal = {draw: {toolbar: {// #TODO: this should be reorganized where actions are nested in actions// ex: actions.undo or a…

新能源汽车空调压缩机:科技驱动的冷暖核心

一、新能源汽车空调系统概述 新能源汽车空调系统在车辆中起着至关重要的作用&#xff0c;它直接影响着驾乘人员的舒适度。新能源汽车空调系统主要由制冷系统、加热系统、送风系统、操纵控制系统和空气净化系统等组成。 制冷系统通常由电动压缩机、冷凝器、压力传感器、电子膨…

Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计 8 数据库设计8.1 数据库设计简介8.2 表关系(一对多)8.3 表关系&#xff08;多对多&#xff09;8.4 表关系&#xff08;一对一&#xff09; 8 数据库设计 8.1 数据库设计简介 软件的研发步骤 数据库设计概念 数据库设计就是根据业务系统的具体需…

IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版

1.打开设置 2.去掉黄色警告线设置 3.去掉背景色设置 4.示范图

vue3中使用vue-diff工具来比较数据差异

1.安装vue-diff npm i vue-diff 2.main.js中全局注册 import VueDiff from "vue-diff"; import "vue-diff/dist/index.css";app.use(VueDiff) 3.使用 <template><div class"contain-page"><el-scrollbar height"100vh&…