C语言 字符数组/多维数组/函数/作用域

1. 遍历数组

  • 遍历数组:通过循环的方式来把数组中的每个元素数据进行查询

  • 使用for循环遍历数组更多一些

  • 数组长度计算:

    • 数组总字节数/元素的数据类型的字节数

    • 数组总字节数/第一个元素的字节数

  • 数组遍历相关的案例:求和,求平均值,求最大值,求最小值,冒泡排序

2. 字符数组

  • 字符数组:多个字符组成的数组,可以看成是字符串

  • 字符数组的结尾应该使用\0标识结束,\0是空字符,没有任何显示

  • 字符数组的五种定义方式:

    方式1:设置了长度后,手动在结尾处添加\0
    char chs1[5]={'a','b','c','d','\0'};
    方式2:设置了长度后,编译器会在末尾添加一个\0,标识结束
    char chs2[5]={'a','b','c','d'};
    方式3:没有设置长度,系统也不会在结尾处添加\0
    char chs3[]={'a','b','c'};
    ​
    注意情况:设置了长度,里面的字符个数和长度一致,没有手动添加\0,编译器也不会在结尾处自动的添加\0
    char chs0[5]={'a','b','c','d','e'}; 
    ​
    方式4:
    char chs4[]={"abcde"};
    方式5:
    char chs5[]="abcdef";
  • 字符数组的遍历和展示

    • 字符数组也是数组,所以,可以使用for循环进行遍历

    • 此时如果使用sizeof计算字符数组的长度的时候,计算的是实际的字节数,也就是说如果用这种方式来遍历数组,此时会多遍历一次,后面会使用字符串相关的函数来计算字符数组的长度,然后再遍历更加合适

    • 字符数组可以看成是字符串,所以,可以使用%s来显示整个字符数组的数据内容

3. 多维数组

  • 多维数组:数组中的元素如果还是数组,此时该数组就可以看成是多维数组

  • 多维数组分为:二维数组,三维数组,四维数组...

  • 二维数组:一个数组中的元素如果还是一个数组,此时该数组可以看成是多维数组中的二维数组

  • 一维数组(普通数组):使用一个索引

  • 二维数组:使用两个索引,两个索引也可以理解为行下标和列下标

  • 二维数组的定义方式:

    方式1:
    int nums[2][2];
    nums[0][0] = 10;
    nums[0][1] = 20;
    nums[1][0] = 30;
    nums[1][1] = 40;
    方式2:
    int nums[2][3]={{1,2,3},{4,5,6}};
    方式3:
    int nums[2][2]={1,2,3,4};
    方式4:
    int nums[][2]={1,2,3,4};
  • 二维数组的行下标和列下标的计算

    行 = 二维数组的总字节数/第一个行的总字节数
    列 = 行的总字节数/第一行第一列的字节数
    列 = 行的总字节数/数组类型的字节数
  • 二维数组的遍历使用的是嵌套for循环(双层for循环),外层循环遍历的是行,内层循环遍历的是列

  • 二维数组在内存中存储也是连续的,和一维数组存储方式一样,所以,二维数组的本质其实还是一维数组

4. 函数相关的概念

  • 函数:就是一些重用代码的封装,一个函数就是一个功能

  • 函数作用:代码的重用,提升可维护性

  • 为什么需要使用函数

    • 程序设计的过程中,在某些位置,或者是特定的情况下,有一些代码需要重复书写或者是使用,此时可以把这些重复使用的代码进行封装,形成一个函数,在需要的位置直接使用该函数即可

      为了方便使用代码,或者是方便维护程序

  • 一个c程序可以由一个.c文件或者是多个.c文件组成

    一个.c文件是由一个或者多个函数组成.所以,函数可以看成是一个.c文件的基本组成单位

    c中函数之间是可以相互调用的,主函数只能有一个,其他函数中不允许调用主函数

5. 函数的定义和函数调用

  • 函数如果要使用,首先需要先定义函数,然后调用即可

  • 函数定义:

    返回值类型名 函数名([参数列表]){函数体/代码块return ;
    }
  • 函数调用:

    函数名([参数列表]);

6. 函数的参数和返回值

  • 函数参数:分为形参和实参

    • 形参:函数在声明或者定义的时候,函数名字后面小括号中声明的变量就是形参

    • 实参:函数在调用或者使用的时候,函数名字后面小括号中传入的变量或者数据就是实参

  • 返回值:如果一个函数在定义的时候,返回值类型是void,代表的是空类型,就意味着该函数没有具体的返回值

  • 如果一个函数在定义的时候,返回值类型不是void,并且函数内部使用return,后面还有具体的数据,那么该函数有返回值

  • 如果一个函数在定义的时候,返回值类型不是void,函数内部没有return,或者说有return,但是后面没有具体的数据,此时该函数没有具体的返回值,可以说有返回值,但是不明确,如果此时外部接收存储该返回值数据就是一个垃圾值,或者叫随机值,没有意义

7. 函数的四种不同表现形式

  • 无参数无返回值的函数:

  • 有参数无返回值的函数:

  • 无参数有返回值的函数:

  • 有参数有返回值的函数:

8. 主函数的理解

  • 主函数:就是一个函数,是程序的主入口,有且只能有一个,主函数中可以调用其他函数,其他函数不能调用主函数,主函数中不能调用自己。

  • 主函数的返回值是int类型,默认内部应该使用return返回0,表示成功,非0则表示失败,建议自己手动书写,如果不写,编译器默认会添加,

  • 主函数的参数有两个,第一个argc,第二个argv,argc表示参数的个数,argv表示参数值,是一个数组,可以通过命令的方式执行xxx.exe程序,并且在后面传入参数到该程序中

9 . 函数原型

  • 函数原型:指的是函数原型语法,分为函数声明和函数定义

  • 函数原型的作用:解决先调用函数,后声明函数出现的警告信息

  • 如果先有函数声明(定义/实现),后调用函数,其实可以不需要声明函数原型

  • 函数原型声明:三种方式:

    方式1:函数头部后面加分号
    void f1(int a);
    或者
    int f2(int a,int b);
    简写方式:
    void f1(int);
    或者
    int f2(int,int);
    ​
    方式2:直接定义一个函数
    void f2(int a){函数体
    }
    ​
    方式3:函数头部,参数列表中可以使用...表示多个参数
    void f3(char num,...);
    ​
    ​
    更加专业一些:实际上方式1,才算是真正的函数原型声明写法

10. 作用域

  • 作用域:变量的使用或访问范围

  • 作用域分为:全局作用域,局部作用域,块级作用域

  • 全局变量:在函数外部或者在函数外部的上面声明的变量

  • 局部变量:在函数内部声明的变量

  • 块级变量:在大括号内部声明的变量

  • 全局作用域:全局变量的使用范围,整个文件

  • 局部作用域:局部变量的使用范围,整个函数

  • 块级作用域:块级变量的使用范围,整个大括号内部

  • 全局变量/全局常量/全局数组如果声明了,没有初始化,默认是0

  • 局部变量/局部常量/局部数组如果声明了,没有初始化,默认是垃圾值

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

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

相关文章

Centos7环境下nifi单机部署

Centos7环境下nifi单机部署 前言一、安装Nifi1.1 下载并解压1.2 修改配置文件 二、启动Nifi程序三、Nifi的简单使用3.1 文件移动3.2 本地文件传到HDFS 参考博客 前言 本以为在服务器上部署nifi很简单,跟着教程走就好,但是并没有成功,可能是因…

c++的应用

整理思维导图周五剩下的三个笔试题利用函数重载,实现对整形数组的冒泡排序,对浮点型数组的冒泡排序整理课上内容在堆区申请一个数组的空间,并完成对该数组中数据的输入和输出,程序结束释放堆区空间 冒泡排序效果图: 代…

YOLOv8-ultralytics-8.2.103部分代码阅读笔记-tuner.py

tuner.py ultralytics\engine\tuner.py 目录 tuner.py 1.所需的库和模块 2.class Tuner: 1.所需的库和模块 # Ultralytics YOLO 🚀, AGPL-3.0 license# 模块提供用于对象检测、实例分割、图像分类、姿势估计和多对象跟踪的 Ultralytics YOLO 模型的超参数调整…

【仪器仪表】怎么模拟电池短路、正极开路或负极开路

最近新人需要做一个电池充放电工装的测试验证板。这种验证板需要模拟很多状态,比如电池有可能发生短路、电池的正极开路、电池负极开路、电池内阻上升、电池电压过高、电池电压过低、电池反接等等。 在规划电池短路、正极开路或负极开路的电路时,本来想用一个继电器做线路的开…

FlinkCDC实战:将 MySQL 数据同步至 ES

📌 当前需要处理的业务场景: 将订单表和相关联的表(比如: 商品表、子订单表、物流信息表)组织成宽表, 放入到 ES 中, 加速订单数据的查询. 同步数据到 es. 概述 1. 什么是 CDC 2. 什么是 Flink CDC 3. Flink CDC Connectors 和 Flink 的版本映射 实战 1. 宽表查…

使用 Glide 加载占位图或错误图时,发现它们没有应用圆角效果--问题解决

如果您在使用 Glide 加载占位图或错误图时,发现它们没有应用圆角效果,可能是因为占位图和错误图的加载方式没有使用自定义的圆角变换。以下是确保占位图和错误图都能显示圆角效果的步骤。 1. 确保自定义变换类正确 首先,确保您的 GlideRoundTransformUtil 类实现正确。以下…

Cobalt Strike 4.8 用户指南-第十二节 可拓展 PE,进程注入和后渗透

12.1、概述 Malleable C2 文件不仅仅是通信指标。Malleable C2 配置文件还能控制 Beacon 的内存特性,决定 Beacon 如何进行进程注入,并影响 Cobalt Strike 的后渗透工作。本章将介绍 Malleable C2 语言的这些扩展。 # 12.2、PE和内存指标 Malleable C…

unity 让文字变形

效果: using TMPro; using UnityEngine; using NaughtyAttributes;[ExecuteInEditMode] public class TMTextPerpective : MonoBehaviour {[OnValueChanged("DoPerspective")][Range(-1f, 1f)]public float CenterBias 0f;[OnValueChanged("DoPers…

NIO - selector简单介绍

一 前言 selector作为NIO当中三大组件之一,是处理NIO非阻塞模式下的核心组件,它允许一个单个线程管理多个通道。 NIO下的阻塞模式 因为对于阻塞模式下的NIO模式,存在很大的问题,即使在单线程下,对应的服务端也会一直进…

C语言:分支结构

C语言:分支结构 分支结构 问题引出 我们在程序设计往往会遇到如下的问题,比如下面的函数的计算 也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句 条件判断…

利用anzocapital昂首资本技术优化订单执行

在金融市场的深海中,anzocapital昂首资本作为内行,深知订单执行的技术缺陷如何悄然侵蚀交易者的利润。那么,一个懂交易的人会如何避免这些缺陷,确保自己的投资策略不被市场波动所左右呢? 在订单执行过程中,技术缺陷可…

数据库基础入门:从零开始学习数据库的核心概念

数据库是现代软件开发的核心组成部分之一,无论是网站、手机应用还是企业管理系统,都离不开数据库的支持。本文将带你从零开始,逐步了解数据库的基本概念和常见操作。 什么是数据库? 数据库(Database)是一个…

RTR Chaptor11 下

全局光照 定向遮蔽预计算定向遮蔽定向遮蔽的动态计算使用定向屏蔽进行着色 满反射全局光照表面预照明定向表面预照明预计算传输存储方法动态漫反射全局光照光照传播体积基于体素的方法屏幕空间方法其他方法 镜面全局光照局部环境贴图环境贴图的动态更新基于体素的方法平面反射屏…

java如何解析和生成sql?

1.什么是 JSQLParser? JSQLParser 是一个开源的 Java 库,用于解析 SQL 语句并将其转换为抽象语法树(AST)。它支持多种 SQL 方言,包括 MySQL、PostgreSQL、Oracle 和 SQL Server 等。JSQLParser 使开发者能够轻松地分析…

【Apache Paimon】-- 4 -- Flink 消费 kafka 数据,然后写入 paimon

目录 1、本地开发环境 2、kafka2paimon 实现流程 3、代码实现 3.1、项目名称 3.2、项目结构 3.3、Pom.xml 和 log4j.properties 文件 3.4、代码核心类 3.4.1、入口类:Kafka2PaimonDemo.java 3.4.2、参数解析类 3.4.2.1、JobParameterUtil.java( flink job schedule…

超越DFINE最新目标检测SOTA模型DEIM

代码地址:https://github.com/ShihuaHuang95/DEIM 论文地址:DEIM: DETR with Improved Matching for Fast Convergence 论文中文版:DEIM: 改进匹配的 DETR 以实现快速收敛 以下是文章的主要贡献和发现: DEIM框架:提…

在python中使用布尔逻辑

布尔是python中常见类型。它的值只能是两项内容之一:true或false. 编写"if"语句 若要在python中表达条件逻辑,可以使用if语句。——编写If语句离不开逻辑运算符:等于、不等于、小于、大于或等于、大于和大于或等于。 在python中…

位运算的总结--奇思妙解

目录 前言 先回顾常用的位运算 1:给一个数 n ,确定它的二进制表示中的第x位是0 还是 1 2:将一个数 n 的二进制表示的第x 位修改成 1 3:将一个数 n 的二进制表示的第 x位修改成 0 4:与位图联系 5:提取一…

语音识别flask接口开发

要开发一个flask语音识别接口,首先要解决语音文件在网络中的传输问题,然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码,以…

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…