C语言----数组

数组是一组有序数据的集合。其中每一个元素都属于同一个数据类型

1.一维数组

(1)定义一维数组

定义一维数组的形式为:

类型说明符   数组名[常量表达式];

①数组名的命名规则和变量名相同,遵循标识符命名规则。
②在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定 a [10],表示 a 数组有10个元素。注意,下标是从0开始的,这10个元素是 a [0] a [1], a [2], a [3], a [4], a [5], a [6], a [7], a [8], a [9]。请特别注意,按上面的定义,不存在数组元素 a [10]。

③常量表达式中可以包括常量和符号常量,如" int a[3+5];"是合法的。不能包含变量,如" int a[n];"是不合法的。

(2)引用一维数组

引用数组的表示形式为:
数组名[下标]

下标可以是整型常量整形表达式

(3)一维数组初始化

为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化

在定义数组时对全部数组元素赋予初值。如:

int a[5]={0,1,2,3,4};

可以只给数组中的一部分元素赋值。例如:

int a[10]={1,2,3,4};

如果想使一个数组中全部元素值为0.可以写成

int a[10]={0,0,0,0,0,0,0,0,0,0};

也可以为:

int a[10]={0};

在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:

int a[]={1,2,3,4,5};

如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被"初始列表"指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初竹为'\0',如果是指针型数组,则初始化为NULL,即空指针)。

2.二维数组

二维数组常称为矩阵

(1)定义二维数组

二维数组定义一般形式为

类型说明符   数组名[常量表达式][常量表达式]

前一个表达式代表,后一个表达式代表

(2)引用二维数组

二维数组元素的表示形式为

数组名[下标][下标]

例如

int a[2][3]代表a数组中序号为2的行中的序号为3的列的元素。下标应为整型表达式。可以为:

a[2-1][2*2-1],不可以为a[2,3],a[2-1,2*2-1]的形式。

(3)二维数组的初始化

分行给二维数组赋初值。例如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

可以对部分元素赋初值。例如:
int a[3][4]={{1},{5},{9}};

如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。例如:

int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3.字符数组

(1)定义字符数组

用来存放字符数据的数组就是字符数组

由于字符数据是以整数形式(ASCII代码)存放的,可以用整数来存放字符数据

(2)字符数据的初始化

对字符数组初始化,最容易理解的方式是用"初始化列表",把各个字符依次赋给数组中各元素。例如:

char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小干数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

(3)字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的。同时C语言规定了一个字符串结束标志,以字符‘\0’作为结束标志。

C 系统在用字符数组存储字符串常常量时会自动加一个'\0'作为结束符。

字符数组还有一个用字符串的初始化方式。如:

char c[10]={"I am happy"};

也可以为:

char c[10]="I am happy";

此时数组c的长度为11,不为10。因为字符串常量的最后由系统加上一个'\0'。

(4)字符数组的输入输出

逐个字符输入输出。用格式符“%c”输入或输出一个字符。

将整个字符串一次输入或输出。用“%s”格式符。

用“%s”格式输出字符串时,printf函数中的输出项为字符数组名,而不是数组元素名。如:

printf("%s",c[0]);                    //此方式错误

printf("%s",c);

如果数组长度大于字符串的实际长度,也只输出到'\0'结束。

输出时不输出'\0'。

如果一个字符数组包含多个'\0',则只输出到第一个'\0'为止。

注意:scanf函数中的输入项如果是字符数组名,则不再加&符

(5)使用字符串处理函数

①puts函数——输出字符串的函数

一般形式为

puts(字符数组)

用puts函数输出时可以包含转义字符

②gets函数——输入字符串的函数(遇回车键结束)

一般形式为:

gets(字符数组)

③strcat函数——字符串连接函数

一般形式为:
strcat(字符数组1,字符数组2){把字符数组2接到字符数组1后面}

④strcpy和strncpy函数——字符产复制函数

一般形式为:

strcpy(字符数组1,字符数组2){将字符串2复制到字符数组1后}

注意:

(a)“字符数组1”必须写成数组名形式,“字符串2”可以为字符数组名,也可以为字符串常量。

(b)如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1前面6个字符,最后4个字符并不一定是'\0',而是 strl 中原有的最后4个字节的内容。

(c)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
(d)可以用 strncpy 函数将字符串2中前面 n 个字符复制到字符数组1中去。例如:

strncpy(str1,str2,2);

作用是将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符。但复制的字符个数n不应多于strl中原有的字符(不包括'\0')。

⑤strcmp函数——字符串比较函数

一般形式为

strcpy(字符串1,字符串2)

作用是比较字符串1和字符串2长度。

(a)如全部字符相同,则认为两个字符串相等
(b)若出现不相同的字符,则以第1对不相同的字符的比较结果为准

注意:小写字母比大写字母大

如果结果为正整数,则字符串1>字符串2,反之字符串1<字符串2,如果为0,则相等

⑥strlen函数——测字符串长度的函数

一般形式为
strlen(字符数组)

⑦strlwr函数——转换为小写的函数

一般形式为

strlwr(字符串)

⑧strupr函数——转换为大写的函数

一般形式为

strupr(字符串)

注意:在使用字符串处理函数时,应当在文件的开头用#include<string.h>

(6)各类输入输出的不同

对于scanf输入字符串,遇到空格和回车键结束,而gets输入遇到回车键结束。


 


 


 


 

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

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

相关文章

3.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-游戏启动流程的分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目搭建 首先下图红框里是游戏启动的程序 游戏启动之后的名字&#xff08;fxgame.exe&#xff09; 一般游戏启动的架构&#xff1a; 第一种&#xff1a;登录器程序启动游戏主程序&#xff0c;然后游…

java面向对象上:类的结构之一

目录 1.相同点 2.不同点 2.1 在类中声明的位置的不同 2.2 关于权限修饰符的不同 2.3 默认初始化值的情况&#xff1a; 2.4 在内存中加载的位置 补充&#xff1a;回顾变量的分类&#xff1a; 方式一&#xff1a;按照数据类型&#xff1a; 方式二&#xff1a;按照在类中…

【Flutter】底部导航BottomNavigationBar的使用

常用基本属性 属性名含义是否必须items底部导航栏的子项List是currentIndex当前显示索引否onTap底部导航栏的点击事件&#xff0c; Function(int)否type底部导航栏类型&#xff0c;定义 [BottomNavigationBar] 的布局和行为否selectedItemColor选中项图标和label的颜色否unsel…

工业网关的功能和优势,以及如何选择合适的工业网关-天拓四方

工业网关是连接各种工业设备和系统的通信设备&#xff0c;可以实现不同设备和系统之间的数据交换和通信。它可以作为一个中心节点&#xff0c;将各种工业设备连接起来&#xff0c;形成一个统一的通信网络&#xff0c;从而实现设备的远程监控、数据采集、分析和控制等功能。在工…

Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

文件处理是任何Web应用程序的重要部分。Python有多个用于创建、读取、更新和删除文件的函数。 文件处理 在Python中处理文件的关键函数是open()函数。open()函数接受两个参数&#xff1a;文件名和模式。 有四种不同的方法&#xff08;模式&#xff09;可以打开文件&#xff1…

抖音小店新手应该怎么做?4个必须掌握的运营步骤,助你快速入门

大家好&#xff0c;我是电商花花。 很多新手在刚开始接触电商&#xff0c;接触抖音小店的时候都会感到迷茫吗&#xff0c;不知所措&#xff0c;新店刚开始都是从没有流量&#xff0c;没有销量&#xff0c;没有订单走过来的&#xff0c;我们也是。 新手做店都是需要方法&#…

wpf grid 列之间存在间隙

上图为grid的两列布局&#xff0c;中间的白线实际为两列的间隙&#xff0c;BorderThickness"0" 并不能消除 解决方法&#xff1a; <Grid RenderOptions.EdgeMode"Aliased"> # 在grid上添加属性

二分图模型即状态整理

二分图首先是个无向图。 主要有以下几类问题&#xff1a; 1.二分图&#xff0c;不存在奇数环&#xff0c;染色法不存在矛盾 2.匈牙利算法&#xff0c;匹配&#xff0c;最大匹配&#xff0c;匹配点&#xff0c;增广路径 3.最小点覆盖&#xff0c;最大独立集&#xff0c;最小路径…

在VS里使用C#制作窗口应用

新建项目 创建项目的时候搜索net&#xff0c;选择这个。 打开应该是这样 第一个控件 选择公共控件 - PictureBox - 拖入Form 在Image处选择上传本地资源&#xff0c;建议上传一个小一点的图片。 修改一下尺寸。 ctrls 保存 从“属性”切换到“事件” 双击Click事件…

kubernetes日志收集 fluent-operator 动态索引名的实现

文章目录 按照服务名区分索引名1.修改fluent-operator&#xff0c;让其支持logstash_prefix_key2.让它能获取app name作为服务名3. 拼接索引名4. 应用变更 发自个人博客&#xff1a; https://uublog.com/article/20230510/kubernetes-fluent-operator-dynamic-index-name/ 日志…

【银河商学】大蓝短视频学习01——定位,定江山

【银河商学】大蓝短视频学习01 定位,定江山一、 变现定位抖音变现的五大模式知识付费直播短视频带货星图广告实体引流招商加盟二、赛道定位赛道选择- 可以多个,有主赛道,有副赛道1. 资源2. 能力3. 兴趣爱好定位,定江山 变现定位——钱则呢么转赛道定位——内容方向则呢么定…

【Jenkins+Gitlab自动化部署配置】

【JenkinsGitlab自动化部署配置】 以下为整理当初参照的博客 阿里云云服务器 ECS 手动搭建GitLab避坑教程 https://blog.csdn.net/Tanasha114/article/details/121602478博客文中的镜像源地址已换 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/Gitlab忘记root用…

DBSCAN密度聚类介绍 样本点 样本集合 半径 邻域 核心对象 边界点 密度直达 密度可达 密度相连

DBSCAN密度聚类介绍 样本点 样本集合 半径 邻域 核心对象 边界点 密度直达 密度可达 密度相连 简介概念定义原理DBSCAN的优点DBSCAN的缺点小尝试制作不易&#xff0c;感谢三连&#xff0c;谢谢啦 简介 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications wi…

【算法】动态规划1,最小花费爬楼梯,解码方法

一、动态规划简介 动态规划 , 英文名称 Dynamic Programming , 简称 DP , 不是具体的某种算法 , 是一种算法思想 ; 动态规划 , 没有具体的步骤 , 只有一个核心思想 ; 动态规划 的 核心思想 是 由大化小 , 大规模问题 使用 小规模问题 计算结果 解决 , 类似于 分治算法 ; 二、…

srs集群下行edge处理逻辑

官方关于源站集群的介绍&#xff1a; Origin Cluster | SRS 下行边缘是指观众端从边缘edge拉流&#xff0c;边缘edge回源到源站origin节点拉流&#xff0c;然后再 把流转给客户端 边缘处理类SrsPlayEdge 当服务器收到播放请求时&#xff0c;创建对应的consumer消费者。在创…

C#_字段 属性 常量与只读

字段(旧称成员变量) 字段定义在类中&#xff08;定义在函数等代码体中的变量称为局部变量&#xff09;实例字段与该对象关联&#xff08;类实例化之后才可调用&#xff09;静态字段与该类型关联&#xff08;为该类型的特征&#xff0c;可直接调用&#xff0c;无需具体至对象&am…

Docker后台启动镜像,如何查看日志信息

执行 docker run -d -p 9090:8080 core-backend-image 命令后&#xff0c;Docker 会在后台运行一个新的容器实例&#xff0c;并映射宿主机的 9090 端口到容器的 8080 端口。要查看启动的容器日志&#xff0c;您需要先获取容器的 ID 或名称&#xff0c;然后使用 docker logs 命令…

令牌颁发与管理服务

技术背景 在分布式系统中,令牌(Token)被广泛应用于身份认证成功后对系统的访问控制。在本文中,我们实现了一个简单的令牌颁发与管理服务,其中包含访问令牌(AccessToken)和刷新令牌(RefreshToken)两种类型的令牌。 功能需求 颁发刷新令牌和访问令牌验证和管理访问令牌…

Linux系统之iptables应用SNAT与DNAT

一、SNAT&#xff1a; 1.应用环境 局域网主机共享单个公网IP地址接入Internet &#xff08;私有IP不能在Internet中正常路由&#xff09; 2.SNAT原理 源地址转换&#xff0c;根据指定条件修改数据包的源IP地址&#xff0c;通常被叫做源映谢数据包从内网发送到公网时&#x…

CDH 6.x版本 HBase基础调优参数

参数默认值调优值参数解释hbase.regionserver.handler.count30120指定了每个RegionServer处理请求的最大线程数hbase.regionserver.metahandler.count30120指定了在RegionServer中处理Meta表的请求数量hbase.client.retries.number1015HBase客户端重试操作的最大次数hbase.hsto…