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); // 输出仍然是10
    
    return 0;
}
示例 2:指针传递
#include <stdio.h>

void modifyValue(int *x) {
    *x = 100; // 通过指针修改主函数中的变量
}

int main() {
    int a = 10;
    modifyValue(&a);
    printf("a = %d\n", a); // 输出100
    
    return 0;
}

在值传递的示例中,modifyValue 函数对参数进行修改不会影响主函数中的变量。而在指针传递的示例中,modifyValue 函数通过指针修改了主函数中的变量的值。

3.3. 函数的返回值

函数可以返回各种类型的值,包括基本数据类型、指针,甚至是结构体。

示例:返回指针
#include <stdio.h>

int* getMax(int *a, int *b) {
    if (*a > *b)
        return a;
    else
        return 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语言编程中扮演着重要角色,熟练掌握它们将大大提升编写高效和可维护代码的能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker启动 Redis提示:Can‘t initialize Background Jobg

问题说明: 在使用docker启动redis失败&#xff0c;但是查看容器日志&#xff0c;除了提示 Fatal:Cant initialize Background Jobg&#xff0c;没有其他错误信息。经过长时间查找资料及试错&#xff0c;现记录下可能的产生原因及解决方案&#xff0c;以便以后参考。 产生原因&…

【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】

目录 stm32电路磁编码器电路电机驱动电路电流采样电路电机选择本文示例硬件说明 为了承载和验证本文的FOC代码工程&#xff0c;本节设计了一个简易的三相无刷电机 硬件套件&#xff0c;主控采用非常常用的stm32f103c8t6单片机&#xff0c;电机编码器采用MT6701&#xff0c;电机…

mysql怎么修改一个字段中的所有部分数据

UPDATE videos SET VideoCode replace(VideoCode,flv,mp4); update 表名 set 字段名 replace&#xff08;字段名&#xff0c;‘修改前’&#xff0c;‘修改后’&#xff09;&#xff1b;

【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段

文章目录 【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段1 问题由来2 操作流程步骤1&#xff1a;打开代码片段定制页步骤2&#xff1a;在新标签页输入定制 XML步骤3&#xff1a;保存定义内容步骤4&#xff1a;功能测试 3 拓展 【工欲善其事】巧用 Sublime Text 生成带…

Elasticsearch使用Easy-Es + RestHighLevelClient实现深度分页跳页

注意&#xff01;&#xff01;&#xff01;博主只在测试环境试了一下&#xff0c;没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩&#xff3f;•̩̩̩̩ ) 也好&#xff0c;少个功能少点BUG 使用from size的时候发现存在max_result_window10000的限制&…

如何使用工具删除 iPhone 上的图片背景

在 iPhone 上删除背景图像变得简单易行。感谢最近 iOS 更新中引入的新功能。如今&#xff0c;iOS 用户现在可以毫不费力地删除背景&#xff0c;而无需复杂的应用程序。在这篇文章中&#xff0c;您将学习如何使用各种方法去除 iPhone 上的背景。这可确保您可以选择最适合您偏好的…

自动驾驶核心技术:感知融合、规划决策、控制执行

1、前言 简单来说&#xff0c;实现自动驾驶需要解决三个核心问题&#xff1a;“我在哪?我要去哪?我该如何去?”能完整解决这三个问题就是真正的自动驾驶。 目前&#xff0c;自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以…

Linux下的IO模型

阻塞与非阻塞IO&#xff08;Input/Output&#xff09; 阻塞与非阻塞IO&#xff08;Input/Output&#xff09;是计算机操作系统中两种不同的文件或网络通信方式。它们的主要区别在于程序在等待IO操作完成时的行为。 阻塞IO&#xff08;Blocking IO&#xff09; 在阻塞IO模式下…

无IDEA不Java:快速掌握Java集成开发环境

IntelliJ IDEA是一种强大的Java集成开发环境&#xff0c;是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能&#xff0c;以帮助初学者快速上手。 安装和配置 首先&#xff0c;需要下载并安装IntelliJ IDEA。在安装完成后&#xff0c;需要配置JDK&#xff…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…

稀缺森林火险等级预测算法,基于xgboost方法的火险等级预测,共划分5级,依据当前地区月份,降水量,风力等参数进行预测,并提供15000字的报告

森林火险等级预测算法&#xff0c;基于xgboost方法的火险等级预测&#xff0c;共划分5级&#xff0c;依据当前地区月份&#xff0c;降水量&#xff0c;风力等参数进行预测&#xff0c;并提供15000字的报告 森林火险等级预测算法介绍 项目名称 基于XGBoost的森林火险等级预测算…

无环SLAM系统集成后端回环检测模块(loop):SC-A-LOAM以及FAST_LIO_SLAM

最近在研究SLAM目标检测相关知识&#xff0c;看到一篇论文&#xff0c;集成了SC-A-LOAM作为后端回环检测模块&#xff0c;在学习了论文相关内容后决定看一下代码知识&#xff0c;随后将其移植&#xff0c;学习过程中发现我找的论文已经集成了回环检测模块&#xff0c;但是我的另…

mybatis-plus使用总结

基本使用 mybatis-plus依赖 <!-- mybatis-plus开始 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency><dependency>&l…

【Linux探索学习】第二弹——Linux的基础指令(中)——夯实基础第二篇

Linux基础指令&#xff08;上&#xff09;&#xff1a;【Linux探索学习】第一弹——Linux的基本指令&#xff08;上&#xff09;——开启Linux学习第一篇-CSDN博客 前言&#xff1a; 在前面我们已经讲解了一些常用的Linux的基础指令&#xff0c;那些当然是远远不够的&#xff…

自定义 shell文件系统

&#x1f3f7;️ 材料准备 创建一个文件:myshell.c: #include <stdio.h>int main() {return 0; }创建一个 Makefile 文件&#xff0c;文件内容如下&#xff1a; 1 mybash:myshell.c2 g -o $ $^ -stdc11 3 .PHONY:…

仿RabbitMQ实现消息队列服务端(二)

文章目录 ⽹络通信协议设计信道管理模块连接管理模块服务器模块实现 ⽹络通信协议设计 其中⽣产者和消费者都是客⼾端&#xff0c;它们都需要通过⽹络和BrokerServer进⾏通信。具体通信的过程我们使⽤Muduo库来实现&#xff0c;使⽤TCP作为通信的底层协议&#xff0c;同时在这个…

【智能大数据分析 | 实验二】Spark实验:部署Spark集群

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

如何编写一个优雅的commit message

在Git中&#xff0c;git commit 命令扮演着至关重要的角色。它的主要作用是将暂存区&#xff08;staging area&#xff09;里的改动内容提交到本地仓库&#xff08;repository&#xff09;中&#xff0c;形成一个新的版本或提交&#xff08;commit&#xff09;。这个过程是 Git…

【HarmonyOS】时间处理Dayjs

背景 在项目中经常会使用要时间的格式转换&#xff0c;比如数据库返回一个Date数据&#xff0c;你需要转成2024-10-2的格式&#xff0c;鸿蒙的原生SDK中是没有办法实现的&#xff0c;因此&#xff0c;在这里介绍第三方封装好并且成熟使用的库Dayjs。 安装 切换到Entry文件夹下…

【学习资源】人在环路的机器学习

说明&#xff1a;本文图片和内容来源 Human-in-the-Loop Machine Learning Human-in-the-Loop Machine Learning Active learning and annotation for human-centered AI by Robert (Munro) Monarch, June 2021 介绍Human-in-the-Loop的目标&#xff0c;学习过程&#xff0c…