C语言--数组(一维数组、二维数组、字符数组)

数组的基本概念:

什么是数组:数组是相同类型有序数据的集合,用统一的数组名来表示,数组中的每一个分量-----元素下标来区分

数组的特征:

①数组中的数据被称为数组的--元素,是同构的

②数组中的元素存放在内存空间里,eg:char king[6] 申请在内存中开辟6块连续的基于char类型的变量空间

衍生概念:下标(索引)

①下标(索引)代表了数组中元素距离第一个元素的偏移位置

②数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址)

③数组的下标是从0开始的

一维数组:

数组的定义:

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

说明:①数组的类型说明符由数组中的元素决定(元素啥类型,数组就是啥类型)

②数组名也是标识符,我们所说的数组[名],可以理解为数据类型是数组的变量[名]

③数组容量也可以叫做常量表达式,eg:int ages[10]、int lcd[1024*768]

类型:代表了数组中元素的类型

容量:数组中能存储多少个元素,数组容量可以是一个常量、常量表达式、还可以是符号常量,但必须是整型

深入理解:①定义一个数组,相当于申请了一个所指定的元素数量的内存单元,所申请的内存单元是连续的

   ②定义一个数组,相当于定义多个匿名变量,这些变量以通用过 数组名[下标] 来标识

数组元素的访问:

原则:数组中的元素不能一次性的访问所有元素,只能一个一个访问

访问方式:数组名[下标名]

注意:数组元素的访问一定不能越界

案例:

数组的初始化 :

定义数组的同时,用指定数据来给对应元素赋值

简化数组定义后,需要对元素一一赋值操作

语法规则:类型 数组名[容量] = {常量1、常量2、常量3.....};

注意:·数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素系统将自动初始化,如0,如果定义数组时,为指定数据容量,则系统会根据初始化元素的个数来决定数组容量

衍生概念:·柔性数组:柔性数组的概念实在C99标准,针对结构体的最后一个成员可以一个未指定大小的数组

    · 广义简单理解:数组容量待定或者待确定的数组,eg:int arr[] = {1,2,3,4,5}

面试题:

·在不知道数组类型的情况下,如何数组元素的个数

 int length = sizeof(arr)/sizeof(arr[0]);

说明:①arr就是我们计算数组本身,sizeof(arr)用来计算该数组中的总字节大小

 ②sizeof(arr[0])用来计算数组中一个元素所占字节的大小,因为数组中的元素类型相同,所以计算哪一个都行

③sizeof(arr)/sizeof(arr[0])就是用数组中的总字节数除以每一个元素所占的字节数,从而得到元素的个数

案例:一维数组

典型应用:数据排序

冒泡排序:·向后冒泡

          思想:①一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好

               ②每次排序将相邻数据两两比较,将较大或较小的数据向后交换,等所有数据都比较完成,将较大或较小的数就会出现在最后,这也是该数应该有的位置

                ③在余下的数中,再次应用第二步,知道只剩下一个数

          ·向前冒泡

            思想:①一次排好一个数,针对n个数,最差情况需要n-1次就可以排好

                  ②每次排序假定第一个元素最大或最小,用第一个元素后面的元素一一与第一个元素比较,遇到较大或较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个数

   ③在余下的数中,再次应用第二步,知道只剩下一个数

二维数组:

定义:①二维数组本质上是一个行列式的组合,也就是说二维数组是由行和列两部分构成,二维数组数据是通过行列解读。

      ②二维数组可以被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过他的元素是一维数组

语法:类型  数组名[行数][列数];

举例:int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}} 等价于 int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};

应用场合:主要应用于数据有行列要求的情况

特殊写法:(建议进做题时)

初始化:

·分行给二维数组赋初始值

·可将所有数据写在一个花括号内,按照排列顺序对元素赋值

·可对部分元素赋初始值,其余未赋值部分自动填充(0、\0、0.0........)

·若对全部元素赋初始值,自定义数组时可以省略第一维数组的长度说明,第二维度的数组长度必须指明

·在分行赋初始值时,也可以省略第一维度的长度

案例:二维数组的遍历

字符数组:

概念:元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的,需要注意的是,我们C语言中的字符是字节字符

字节字符:也就是一个字符占一个字节

Eg:

语法:

注意:我们的char数组初始化的时候,没有完全赋完值的时候,空出来的地方用\0补充

案例一:

字符串和字符数组结束的标志:

说明:

字符串数组的多样表示如下:

注意:·字符串的长度与字符数组的长度不一定相同

·利用字符串常量,可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值,eg:如下

字符串的基础操作:

字符串的输入:

①语法:scanf(“%s”,数组名);

案例:

采用scanf进行字符串的输入,要求字符串中不能存在空格,

②语法:fgets[数组名,数组容量,stdin];

说明:采用fgets进行字符串输入,可以获取所以输入的字符串,包含\n,在实际的字符串处理时,我们可能需要处理\n

案例:

注意:·如果输入的字符串不包括空格和换行,可以使用是scanf()和fgets()

      ·如果属于入的字符串包含空格和换行,只能使用fgets()

字符串的输出:

puts(数组名)

案例:

字符串的拼接:

strcat(数组名,”需要拼接的字符串”)

注意:需要引入#include <string.h>

案例:

字符串拷贝:

strcpy(数组名,字符串)

注意:需要引入<string.h>库

说明:这个方法适合给字符串赋值用

案例:

字符串的比较:

strcmp(字符串1,字符串2);

注意:·需要引入<string.h>库

      ·返回结果是布尔类型

案例:

获取字符串的长度:

strlen(字符串)

注意:·需要引入<string.h>库

      ·返回的是字符串的长度

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值