C语言复习概要(二)

本文目录
- C语言中的数组与函数详解
- 1. 引言
- 2. 数组
- 2.1. 什么是数组?
- 语法:
- 示例:
- 2.2. 数组的初始化
- 示例 1:在声明时初始化
- 示例 2:部分初始化
- 示例 3:运行时赋值
- 2.3. 数组的访问与修改
- 示例:
- 2.4. 多维数组
- 示例:二维数组
- 2.5. 数组作为函数参数
- 示例:数组作为函数参数
- 3. 函数
- 3.1. 什么是函数?
- 函数语法:
- 示例:基本函数
- 3.2. 函数的参数传递
- 示例 1:值传递
- 示例 2:指针传递
- 3.3. 函数的返回值
- 示例:返回指针
- 4. 数组与函数的结合使用
- 示例:数组求平均值
- 4.1. 使用指针遍历数组
- 示例:使用指针遍历数组
- 5. 结论
C语言中的数组与函数详解
1. 引言
在C语言中,数组和函数是两个非常基础且重要的概念。数组用于存储同类型数据的集合,而函数则有助于代码的模块化,提升可读性和复用性。本篇文章将详细讲解数组和函数的概念及其用法,并配以大量代码示例,帮助读者更好地掌握这两个概念。
2. 数组
2.1. 什么是数组?
数组是一组相同数据类型的变量集合,这些变量存储在连续的内存空间中。通过使用数组,我们可以减少声明多个变量的复杂性,尤其在需要处理大量数据时,数组显得尤为重要。
语法:
数据类型 数组名[数组大小];
示例:
int numbers[5]; // 声明一个包含5个整数的数组
2.2. 数组的初始化
数组在声明时可以同时进行初始化,也可以在程序执行时再赋值。
示例 1:在声明时初始化
int numbers[5] = {10, 20, 30, 40, 50}; // 初始化一个包含5个整数的数组
示例 2:部分初始化
int numbers[5] = {10, 20}; // 仅初始化前两个元素,其他元素默认为0
示例 3:运行时赋值
int numbers[5];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
2.3. 数组的访问与修改
我们可以通过索引访问数组中的元素,索引从0开始。
示例:
#include <stdio.h>int main() {int numbers[5] = {10, 20, 30, 40, 50};// 访问数组的第一个元素printf("第一个元素:%d\n", numbers[0]);// 修改数组中的某个元素numbers[2] = 35;printf("修改后的第三个元素:%d\n", numbers[2]);return 0;
}
2.4. 多维数组
除了基本的一维数组,C语言还支持多维数组。最常用的多维数组是二维数组,它可以看作是一个数组的数组。
示例:二维数组
#include <stdio.h>int main() {int matrix[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 访问二维数组的元素printf("元素 matrix[1][2] = %d\n", matrix[1][2]);return 0;
}
2.5. 数组作为函数参数
在C语言中,数组可以作为函数参数进行传递。当我们将数组传递给函数时,实际上传递的是数组的首地址。
示例:数组作为函数参数
#include <stdio.h>void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int numbers[5] = {10, 20, 30, 40, 50};// 调用函数打印数组printArray(numbers, 5);return 0;
}
在这个例子中,printArray 函数接收一个数组和数组的大小,然后遍历数组并打印其中的元素。
3. 函数
3.1. 什么是函数?
函数是具有特定功能的一段代码,通过将复杂的操作封装成函数,可以实现代码的复用和模块化。函数有助于提高代码的可读性和维护性。
函数语法:
返回类型 函数名(参数列表) {// 函数体
}
示例:基本函数
#include <stdio.h>// 定义一个求和函数
int sum(int a, int b) {return a + b;
}int main() {int result = sum(10, 20);printf("10 + 20 = %d\n", result);return 0;
}
在这个例子中,函数 sum 接收两个整数作为参数,并返回它们的和。
3.2. 函数的参数传递
在C语言中,函数的参数可以通过值传递和指针传递的方式进行传递。
示例 1:值传递
#include <stdio.h>void modifyValue(int x) {x = 100; // 不会影响主函数中的变量
}int main() {int a = 10;modifyValue(a);printf("a = %d\n", a); // 输出仍然是10return 0;
}
示例 2:指针传递
#include <stdio.h>void modifyValue(int *x) {*x = 100; // 通过指针修改主函数中的变量
}int main() {int a = 10;modifyValue(&a);printf("a = %d\n", a); // 输出100return 0;
}
在值传递的示例中,modifyValue 函数对参数进行修改不会影响主函数中的变量。而在指针传递的示例中,modifyValue 函数通过指针修改了主函数中的变量的值。
3.3. 函数的返回值
函数可以返回各种类型的值,包括基本数据类型、指针,甚至是结构体。
示例:返回指针
#include <stdio.h>int* getMax(int *a, int *b) {if (*a > *b)return a;elsereturn b;
}int main() {int x = 10, y = 20;int *max = getMax(&x, &y);printf("较大值为:%d\n", *max);return 0;
}
4. 数组与函数的结合使用
数组和函数经常结合使用,例如将数组作为函数的输入参数,通过函数来处理或修改数组。
示例:数组求平均值
#include <stdio.h>// 定义一个计算数组平均值的函数
double calculateAverage(int arr[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];}return (double)sum / size;
}int main() {int numbers[5] = {10, 20, 30, 40, 50};double avg = calculateAverage(numbers, 5);printf("平均值为:%.2f\n", avg);return 0;
}
4.1. 使用指针遍历数组
C语言中的数组名其实是一个指向数组首元素的指针,因此我们可以使用指针来遍历数组。
示例:使用指针遍历数组
#include <stdio.h>void printArrayUsingPointer(int *arr, int size) {for (int i = 0; i < size; i++) {printf("%d ", *(arr + i));}printf("\n");
}int main() {int numbers[5] = {10, 20, 30, 40, 50};printArrayUsingPointer(numbers, 5);return 0;
}
在这个例子中,printArrayUsingPointer 使用指针遍历数组并输出每个元素。
5. 结论
本文详细介绍了C语言中的数组与函数的概念、基本语法、实际应用场景以及数组和函数的结合使用方式。通过丰富的代码实例,读者可以更好地理解和掌握这两个基础概念,并能够在实际项目中灵活应用。数组和函数在C语言编程中扮演着重要角色,熟练掌握它们将大大提升编写高效和可维护代码的能力。
相关文章:
C语言复习概要(二)
本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组?语法:示例: 2.2. 数组的初始化示例 1:在声明时初始化示例 2:部分初始化示例 3:运行时赋值 2.3. 数组的访问与修改示例: 2.4. 多…...
小程序原生-利用setData()对不同类型的数据进行增删改
1. 声明和绑定数据 wxml文件 <view> {{school}} </view> <view>{{obj.name}}</view> <view id"{{id}}" > 绑定属性值 </view> <checkbox checked"{{isChecked}}"/> <!--算数运算--> <view>{{ id …...
.NET Core 集成 MiniProfiler性能分析工具
前言: 在日常开发中,应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能:如:Zipkin等;但这些过于复杂,需要单独搭建。 MiniProfiler就是一款简单,但功能强大的应用…...
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
本文项目编号 T 063 ,文末自助获取源码 \color{red}{T063,文末自助获取源码} T063,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...
信息学奥赛一本通 1885:【14NOIP提高组】寻找道路 | 洛谷 P2296 [NOIP2014 提高组] 寻找道路
【题目链接】 洛谷 P2296 [NOIP2014 提高组] 寻找道路 ybt 1885:【14NOIP提高组】寻找道路 【题目考点】 1. 图论:广搜 2. 图论:反图 【解题思路】 设path数组,path[i]表示顶点i出发到终点t是否有路径。 先求path数组&#…...
JVM 基础、GC 算法与 JProfiler 监控工具详解
目录 1、引言 1.1 JVM内存与本地内存 1.2 JVM与JDK的关系 2、JVM基础 2.1 JVM(Java Virtual Machine) 2.2 Java与JVM的关系 2.3 JVM的内存结构 2.3.1 堆内存 2.3.2 栈内存 2.3.3 方法区 2.3.4 本地方法栈 2.3.5 程序计数器(PC寄存…...
nodejs安装及环境配置
一、下载 进入官网https://nodejs.org/en/download/prebuilt-installer下载node.js安装包,选择对应版本的node,这里我选择的是14.21.3版本 二、安装 1、下载完成后,双击“node-v14.21.3-x64.msi”,开始安装Node.js 2、勾选复…...
无人机电力巡检:点亮电力巡检新视野!
一、无人机电力巡查的优势 提高巡检效率:无人机可以搭载高清摄像头、红外热像仪等先进设备,实时拍摄和传输图像,帮助巡检人员快速发现潜在问题,如电线破损、绝缘子污损、设备过热等,从而大大缩短了巡检周期。 降低人…...
详细介绍:API 和 SPI 的区别
文章目录 Java SPI (Service Provider Interface) 和 API (Application Programming Interface) 的区别详解目录1. 定义和目的1.1 API (Application Programming Interface)1.2 SPI (Service Provider Interface) 2. 使用场景2.1 API 的应用场景2.2 SPI 的应用场景 3. 加载和调…...
【面向对象】设计模式概念和分类
零.前提提要 本文章是我考中级软件设计师时的笔记,基本都是一些自己的思路和见解,现记录一下,希望可以帮助到即将考证的同学。 一.面向对象设计模式的概念 二.面向对象的设计模式分类 设计模式确定了所包含的类和实例、他们的角色和写作方式以…...
APK安装包arm64-v8a、armeabi-v7a、x86、x86_64如何区别?(2024年10月1日)
其实就是安卓CPU的进步史 安卓CPU类型: arm64-v8a: 第8代、64位ARM处理器,目前手机大多数是此架构(新手机,可以无脑选择)armeabiv-v7a: 第七代及以上的 ARM 处理器。2011年5月以后生产的大部分安卓设备都使用它armeabi: 第5代、第6代的ARM处理器&#…...
【DataLoom】智能问数 - 自然语言与数据库交互
探索DataLoom的智能问数功能:简化数据库查询 在数据驱动的决策制定中,数据库查询是获取洞察的关键步骤。但是,传统的数据库查询方法往往复杂且技术性强,这限制了非技术用户的使用。DataLoom的智能问数功能正是为了解决这一问题而…...
【Linux】进程地址空间(初步了解)
文章目录 1. 奇怪的现象2. 虚拟地址空间3. 关于页表4. 为什么要有虚拟地址 1. 奇怪的现象 我们先看一个现象: 为什么父子进程从“同一块地址中”读取到的值不一样呢? 因为这个地址不是物理内存的地址 ,如果是物理内存的地址是绝对不可能出…...
hdu-6024
hdu-6024 struct node {int x, c;bool operator<(const node &a) const{return x < a.x;} }; // dp[i][0]为到第i个教室且第i个教室不建糖果店的花费前缀和,dp[i][1]为到第i个教室且第i个教室建糖果店的花费前缀和 int dp[N][2]; void solve() {int n;wh…...
jmeter操作数据库
jmeter操作数据库 一、打开数据库 二、jmeter下载驱动,安装jdbc驱动 1、下载好的驱动包 2、将驱动包复制粘贴 存放在包的路径下 (1)jdk下面 a、路径:jdk1\jre\lib b、jdk1\jre\lib\ext (2)jmeter下 a、…...
Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(上篇)
由于 SD 具有强大的可控性,在固定人物角色方面,SD 是远超 MJ 的, 其中最好用,也是最优先的方法就是训练一个自己专属的角色模型,例如之前使用秋叶训练器得到的 LoRA模型。 另外,如果不想自己训练模型的话…...
中国计量大学《2023年801+2023年819自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《中国计量大学801819自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2023年801真题 2023年819真题 Part1:2023年完整版真题 2023年801真题…...
本地运行LLama 3.2的三种方法
大型语言模型(LLMs)已经彻底改变了AI领域,小型模型也在崛起。因此,即使是在旧的PC和智能手机上运行先进的LLMs也成为了可能。为了给大家一个起点,我们将探索三种不同的方法来本地与LLama 3.2进行交互。 先决条件 在我…...
基于单片机的温度和烟雾检测
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采用DS18B20读取温度,滑动变阻器链接ADC0832数模转换模拟烟雾, 通过lcd1602显示屏显示, 超过阈值则对应的led灯亮起,蜂鸣器…...
利士策分享,探寻中华民族的精神纽带
利士策分享,探寻中华民族的精神纽带 在历史的长河中,中华民族以其独特的文化魅力和坚韧不拔的民族精神,屹立于世界民族之林。 这份力量,源自何处?或许,正是那份纯真的情,如同纽带一般ÿ…...
ROS实战:5分钟搞定大华网络摄像机RTSP流接入(Ubuntu18.04+Melodic版)
ROS实战:5分钟搞定大华网络摄像机RTSP流接入(Ubuntu18.04Melodic版) 在智能机器人开发领域,实时视频流处理是构建环境感知系统的核心能力之一。大华作为安防行业领先品牌,其网络摄像机被广泛应用于工业检测、智能巡检等…...
告别Swagger注解污染:用smart-doc + Maven插件5分钟生成整洁API文档(SpringBoot实战)
零侵入API文档革命:smart-doc在SpringBoot项目中的极致实践 如果你曾经被Swagger注解污染代码所困扰,或是厌倦了在业务逻辑中嵌入大量文档相关注解,那么smart-doc可能会成为你API文档管理的新选择。作为一款基于源码解析的文档生成工具&#…...
PyAEDT终极指南:3个技巧让你快速掌握Python自动化工程仿真
PyAEDT终极指南:3个技巧让你快速掌握Python自动化工程仿真 【免费下载链接】pyaedt AEDT Python Client Package 项目地址: https://gitcode.com/gh_mirrors/py/pyaedt PyAEDT是Ansys Electronics Desktop(AEDT)的Python客户端工具包&…...
当仿真与FPGA打架时,你该信谁?
该文章同步至公众号OneChan 一、一个真实的故事:比特翻转的“罗生门” 去年,我们在做一款通信芯片的嵌入式固件开发。在仿真环境中,我们精心编写的DMA驱动完美无缺,数据传输的CRC校验次次通过。我们信心满满地把比特流下载到FPG…...
保姆级教程:用PtitPrince的RainCloud函数,5步搞定分组数据可视化
5步精通RainCloud Plot:用PtitPrince实现专业级分组数据可视化 第一次看到同事用雨云图展示A/B测试结果时,我被这种"既见森林又见树木"的呈现方式震撼了——左侧的密度曲线如山脉般起伏,中间的箱线图标出关键分位点,右侧…...
WarcraftHelper:魔兽争霸III游戏性能优化与兼容性解决方案完整指南
WarcraftHelper:魔兽争霸III游戏性能优化与兼容性解决方案完整指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏《魔兽争…...
祝贺电影《得闲谨制》荣获2026亚洲艺术电影节 六项提名
电影《得闲谨制》荣获2026亚洲艺术电影节「金海燕奖」主竞赛单元六项提名: 祝贺导演孔笙 提名最佳导演; 祝贺编剧伍千万里四十八 提名最佳编剧; 祝贺演员肖战 提名最佳男主角; 祝贺演员尹正 提名最佳男配角; 祝贺美术指…...
[模电]从PN结到实用电路:二极管的深度解析与设计指南
1. PN结:二极管的物理基础 想象一下把一块P型半导体和N型半导体紧密贴合在一起,就像把两块不同颜色的橡皮泥揉捏在一起。P型半导体里充满了带正电的"空穴"(可以理解为缺少电子的位置),而N型半导体则富含自由…...
Qwen3.5-2B效果展示:对含中英混排、公式符号的PDF截图进行精准语义还原
Qwen3.5-2B效果展示:对含中英混排、公式符号的PDF截图进行精准语义还原 1. 模型概览 Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛部署特性&#x…...
Nanobot技能扩展开发:自定义OpenClaw功能模块教程
Nanobot技能扩展开发:自定义OpenClaw功能模块教程 1. 引言 想给你的Nanobot智能助手添加一些个性化功能吗?比如让它帮你查天气、管理待办事项,或者连接你常用的办公软件?今天就来手把手教你如何为Nanobot开发自定义技能模块。 …...
