数组的概念:
数组是一组相同类型元素的集合,可以存放一个或者多个数组,但是数组元素个数不能为0
分类:
数组分为一位数组和多维数组,多维数组中常见的为二维数组。
数组的创建:
type为数据类型;可以是
也可以自定义的类型
arr_name为数组名;起的有意义即可(有多种命名法,如驼峰命名法,在这边不做展开)
[常量值]是创建数组的大小;这个大小根据实际的需要来确定。
数组的初始化:
在数组创建的时候,我们就给定数组一些值,这就叫做数组的初始化。
初始化的数据一般要放在大括号里面{};
初始化分为完全初始化和不完全初始化;
注意:初始时给出的元素个数不能超过数组的大小;
注意:int arr[] = {1,2,3,4,5,6};
当[]里的数字不写时,数组的大小将会根据初始化时数据的个数决定。
数组的类型:数组的类型算是一种自定义类型,去掉数组名就是数组的类型。
一维数组的使用:
学习了一维数组的基本语法之后,我们来进行一维数组的使用
数组下标:C语言规定数组是有下标的,假设数组有n个元素,最后一个下标就是n-1;下标是数组元素的编号。
在C语言中,我们1提供了一个下标引用操作符[]
当我们想访问arr数组中下标为3的元素时,我们就写arr[3]
数组元素的打印:
print("%d",arr[x])
其中%d指的是换成数组所对应的具体类型;arr是数组名;x是访问的下标数;
如果想打印整个数组,可以使用for循环,将下标数字都循环一遍。
数组的更改:我们也可以根据需要将数组对于的元素更改为需要的值
arr[x] = y;
一维数组在内存中的存储:
需要了解一位数组在内存中到底是怎么存储的,让我们来看看数组的地址
结果:
结果分析:从结果中看,数组随着下标增长,地址由小变大,并且每两个元素之间相邻4(因为一个整形是4个字节)。我们得出一个结论:数据在内存中是连续存放的。这位以后指针的学习打下基础。
sizeof计算数组元素个数
优点:
二维数组:如果我们把一位数组当作数组的元素,此时得到的数组就是二维数组,如果将二位数组当作数组元素,此时得到的数组就是三维数组,二维数组以上都叫做多维数组。
二维数组的创建:
其中:3代表数组有3行;5表示每一行有5个元素
二维数组的初始化:
二维数组的不完全初始化:
完全初始化:
按照行初始化:
注意:初始化时可以省略行,但是不能省略列;
二维数组的使用:
二位数组的访问:arr[x][y];
x为第x行,y为第y列;
二维数组的输入和输出:我们可以借助循环来遍历生成所有代码
二维数组在内存中的存储:
我们通过打印出二维数组的所有元素地址打印出来来探索
输出的结果:
C99的变长数组:
C99之前,数组的大小是用常量确定的(vs默认不支持C99中的变长数组,所以我们可以借助gcc编译器来使用变长数组)
C99之后,引入了变长数组的概念,可以使用变量指定数组的大小
练习题:
练习1:多个字符从两端移动,向中间汇聚。
练习2:⼆分查找 在⼀个升序的数组中查找指定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低。 ⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让 你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然 后看⼤了还是⼩了,这就是⼆分查找,也叫折半查找。
答案会在下一个课件中显示(指针)