当前位置: 首页 > news >正文

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. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…...

小程序原生-利用setData()对不同类型的数据进行增删改

1. 声明和绑定数据 wxml文件 <view> {{school}} </view> <view>{{obj.name}}</view> <view id"{{id}}" > 绑定属性值 </view> <checkbox checked"{{isChecked}}"/> <!--算数运算--> <view>{{ id …...

.NET Core 集成 MiniProfiler性能分析工具

前言&#xff1a; 在日常开发中&#xff0c;应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能&#xff1a;如&#xff1a;Zipkin等&#xff1b;但这些过于复杂&#xff0c;需要单独搭建。 MiniProfiler就是一款简单&#xff0c;但功能强大的应用…...

【JAVA开源】基于Vue和SpringBoot的旅游管理系统

本文项目编号 T 063 &#xff0c;文末自助获取源码 \color{red}{T063&#xff0c;文末自助获取源码} T063&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...

信息学奥赛一本通 1885:【14NOIP提高组】寻找道路 | 洛谷 P2296 [NOIP2014 提高组] 寻找道路

【题目链接】 洛谷 P2296 [NOIP2014 提高组] 寻找道路 ybt 1885&#xff1a;【14NOIP提高组】寻找道路 【题目考点】 1. 图论&#xff1a;广搜 2. 图论&#xff1a;反图 【解题思路】 设path数组&#xff0c;path[i]表示顶点i出发到终点t是否有路径。 先求path数组&#…...

JVM 基础、GC 算法与 JProfiler 监控工具详解

目录 1、引言 1.1 JVM内存与本地内存 1.2 JVM与JDK的关系 2、JVM基础 2.1 JVM&#xff08;Java Virtual Machine&#xff09; 2.2 Java与JVM的关系 2.3 JVM的内存结构 2.3.1 堆内存 2.3.2 栈内存 2.3.3 方法区 2.3.4 本地方法栈 2.3.5 程序计数器&#xff08;PC寄存…...

nodejs安装及环境配置

一、下载 进入官网https://nodejs.org/en/download/prebuilt-installer下载node.js安装包&#xff0c;选择对应版本的node&#xff0c;这里我选择的是14.21.3版本 二、安装 1、下载完成后&#xff0c;双击“node-v14.21.3-x64.msi”&#xff0c;开始安装Node.js 2、勾选复…...

无人机电力巡检:点亮电力巡检新视野!

一、无人机电力巡查的优势 提高巡检效率&#xff1a;无人机可以搭载高清摄像头、红外热像仪等先进设备&#xff0c;实时拍摄和传输图像&#xff0c;帮助巡检人员快速发现潜在问题&#xff0c;如电线破损、绝缘子污损、设备过热等&#xff0c;从而大大缩短了巡检周期。 降低人…...

详细介绍: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. 加载和调…...

【面向对象】设计模式概念和分类

零.前提提要 本文章是我考中级软件设计师时的笔记&#xff0c;基本都是一些自己的思路和见解&#xff0c;现记录一下&#xff0c;希望可以帮助到即将考证的同学。 一.面向对象设计模式的概念 二.面向对象的设计模式分类 设计模式确定了所包含的类和实例、他们的角色和写作方式以…...

APK安装包arm64-v8a、armeabi-v7a、x86、x86_64如何区别?(2024年10月1日)

其实就是安卓CPU的进步史 安卓CPU类型: arm64-v8a: 第8代、64位ARM处理器&#xff0c;目前手机大多数是此架构(新手机&#xff0c;可以无脑选择)armeabiv-v7a: 第七代及以上的 ARM 处理器。2011年5月以后生产的大部分安卓设备都使用它armeabi: 第5代、第6代的ARM处理器&#…...

【DataLoom】智能问数 - 自然语言与数据库交互

探索DataLoom的智能问数功能&#xff1a;简化数据库查询 在数据驱动的决策制定中&#xff0c;数据库查询是获取洞察的关键步骤。但是&#xff0c;传统的数据库查询方法往往复杂且技术性强&#xff0c;这限制了非技术用户的使用。DataLoom的智能问数功能正是为了解决这一问题而…...

【Linux】进程地址空间(初步了解)

文章目录 1. 奇怪的现象2. 虚拟地址空间3. 关于页表4. 为什么要有虚拟地址 1. 奇怪的现象 我们先看一个现象&#xff1a; 为什么父子进程从“同一块地址中”读取到的值不一样呢&#xff1f; 因为这个地址不是物理内存的地址 &#xff0c;如果是物理内存的地址是绝对不可能出…...

hdu-6024

hdu-6024 struct node {int x, c;bool operator<(const node &a) const{return x < a.x;} }; // dp[i][0]为到第i个教室且第i个教室不建糖果店的花费前缀和&#xff0c;dp[i][1]为到第i个教室且第i个教室建糖果店的花费前缀和 int dp[N][2]; void solve() {int n;wh…...

jmeter操作数据库

jmeter操作数据库 一、打开数据库 二、jmeter下载驱动&#xff0c;安装jdbc驱动 1、下载好的驱动包 2、将驱动包复制粘贴 存放在包的路径下 &#xff08;1&#xff09;jdk下面 a、路径&#xff1a;jdk1\jre\lib b、jdk1\jre\lib\ext &#xff08;2&#xff09;jmeter下 a、…...

Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(上篇)

由于 SD 具有强大的可控性&#xff0c;在固定人物角色方面&#xff0c;SD 是远超 MJ 的&#xff0c; 其中最好用&#xff0c;也是最优先的方法就是训练一个自己专属的角色模型&#xff0c;例如之前使用秋叶训练器得到的 LoRA模型。 另外&#xff0c;如果不想自己训练模型的话…...

中国计量大学《2023年801+2023年819自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《中国计量大学801819自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2023年801真题 2023年819真题 Part1&#xff1a;2023年完整版真题 2023年801真题…...

本地运行LLama 3.2的三种方法

大型语言模型&#xff08;LLMs&#xff09;已经彻底改变了AI领域&#xff0c;小型模型也在崛起。因此&#xff0c;即使是在旧的PC和智能手机上运行先进的LLMs也成为了可能。为了给大家一个起点&#xff0c;我们将探索三种不同的方法来本地与LLama 3.2进行交互。 先决条件 在我…...

基于单片机的温度和烟雾检测

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS18B20读取温度&#xff0c;滑动变阻器链接ADC0832数模转换模拟烟雾&#xff0c; 通过lcd1602显示屏显示&#xff0c; 超过阈值则对应的led灯亮起&#xff0c;蜂鸣器…...

利士策分享,探寻中华民族的精神纽带

利士策分享&#xff0c;探寻中华民族的精神纽带 在历史的长河中&#xff0c;中华民族以其独特的文化魅力和坚韧不拔的民族精神&#xff0c;屹立于世界民族之林。 这份力量&#xff0c;源自何处&#xff1f;或许&#xff0c;正是那份纯真的情&#xff0c;如同纽带一般&#xff…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

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

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;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卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Linux中《基础IO》详细介绍

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

【51单片机】4. 模块化编程与LCD1602Debug

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