数组的创建和使用以及存储

目录

1.一维数组的创建和初始化

2.二维数组的创建和初始化

3数组越界

4.数组作为函数参数

5.数据实例:


1.一维数组的创建和初始化

2.一维数组的使用

3.一维数组在内存中的存储

4.二维数组的创建和初始化

5.二维数组的使用

6.二维数组在内存中的存储

7.数组越界

8.数组作为函数参数

9.数组的应用实例1:三子棋

10.数组的应用实例2:扫雷游戏

1.一维数组的创建和初始化

1.1数组的创建

数组是一组相同类型元素的集合。

数组的创建方式:

type arr_name [cont];
//type 是数组的元素类型
//const 是一个常量表达式,用来指定数组的大小

数组的创建和使用以及存储_第1张图片

数组创建的实例:

//代码1:
int arr1[10];

//代码2
int coun_t = 10;
int arr2[coun_t];//数组可以正常创建吗?

//代码3
char arr3[10];
float arr4[1];
double arr5[20];

注:数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

1.2数组的创建

二维数组的sizeof用法

数组的创建和使用以及存储_第2张图片

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始化值(初始化)。列:

数组的创建和使用以及存储_第3张图片

数组的创建和使用以及存储_第4张图片

数组在创建的时候如果想不指定数组确定的大小就得初始化。数组的元素个数根据初始化的内容来确定

但是对于下面的代码要区分,内存中如何分配的。

数组的创建和使用以及存储_第5张图片

在打印字符的时候遇到\0才会停止,第一种在内存中后面会默认隐藏存放一个\0,而第二种没有,所以会打印一些字符烫烫烫烫,要分清楚双引号引起的字符和单引号引起的字符

1.3一维数组的使用

对于数组的使用我们之前介绍了一个操作符:[],下标引用操作符。它其实就是数组访问的操作符。

数组的创建和使用以及存储_第6张图片

在访问数组的时候它们的下标也是从零开始

数组的创建和使用以及存储_第7张图片

总结:

1.数组是使用下标来访问的,下标是从零开始。

2.数组的大小可以通过计算得到。

数组的创建和使用以及存储_第8张图片

注:求一个数组的元素个数可以通过sizeof计算整个数组的类型大小再除以sizeof计算单个元素类型的大小就能得到整个数组的所有元素。

1.4一维数组在内存中的存储

接下来查看数组在内存中的存放

数组的创建和使用以及存储_第9张图片

我们也可以通过指针来访问,因为指针是用来保存地址的,只要知道了第一个地址就可以顺藤摸瓜找到它后面的所有元素的地址,可以对比一下

数组的创建和使用以及存储_第10张图片

数组的创建和使用以及存储_第11张图片

数组的创建和使用以及存储_第12张图片

以此得出结论数组在内存中是连续存放的

2.二维数组的创建和初始化

2.1二维数组的创建

二维数组就是多行多列。

//数组创建
int arr[3][4];
char arr[3][4];
double arr[2][3]

比如这个样子

数组的创建和使用以及存储_第13张图片

2.2二维数组的初始化

数组的创建和使用以及存储_第14张图片

2.3二维数组的使用

二维数组也是通过下标的方式来访问

数组的创建和使用以及存储_第15张图片

2.4二维数组在内存中的存储

数组的创建和使用以及存储_第16张图片

数组的创建和使用以及存储_第17张图片

假象中是多行多列,实际上是连续存放的

二维数组在内存中也是连续存放的,既然是连续存放的我们能不能把二维数组看成一维数组?

数组的创建和使用以及存储_第18张图片

通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

数组的创建和使用以及存储_第19张图片

我们可以理解成二维数组也是一维数组的数组

3数组越界

数组的下标是有范围限制的。

数组的下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。

所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的。

所以程序员写代码时,最好自己做越界的检查。

数组的创建和使用以及存储_第20张图片

当i = 10的时候越界访问了,访问了不属于他开辟的空间,但是编译器不一定会报错

同理二维数组的行和列也可能存在越界访问。

4.数组作为函数参数

往往我们写代码的时候,会将数组作为参数传给函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数。

将一个整形数组排序。

4.1冒泡排序函数的错误设计

数组的创建和使用以及存储_第21张图片

arr是数组代表的是首元素地址,这里传过去的只有一个元素,所以这里sizeof无法求出整个数组的大小

数组的创建和使用以及存储_第22张图片

小技巧:如果要观察形参数组的元素个数在中间加个,后面加个10

数组的创建和使用以及存储_第23张图片

4.2数组名是什么

数组的创建和使用以及存储_第24张图片

数组的创建和使用以及存储_第25张图片

4.3冒泡排序函数的正确设计

数组的创建和使用以及存储_第26张图片

数组的创建和使用以及存储_第27张图片

数组传参,传的是数组首元素地址,形参可以写成数组,也可以写成指针,即使形参写成数组,本质上也是指针。

数组的创建和使用以及存储_第28张图片

5.数据实例:

5.1数组的应用实例1:三子棋

已发布

5.2数组的应用实例2:扫雷

你可能感兴趣的:(C语言,c语言)