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灯亮起,蜂鸣器…...

利士策分享,探寻中华民族的精神纽带
利士策分享,探寻中华民族的精神纽带 在历史的长河中,中华民族以其独特的文化魅力和坚韧不拔的民族精神,屹立于世界民族之林。 这份力量,源自何处?或许,正是那份纯真的情,如同纽带一般ÿ…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...