在前面的“初识C语言”等其他章节中,或多或少的就已经接触过数组,但是都没进一步的去了解、学习数组。这一章,将会系统且详细的学习什么是数组、数组的使用等内容。同时也希望能通过这篇文章让一同学习的朋友对数组有更深层次的理解。话不多说,正文开始!
本章重点
一维数组的创建和初始化
一维数组的使用
一维数组在内存中的存储
二维数组的创建和初始化
二维数组的使用
二维数组在内存中的存储
数组作为函数参数
数组的应用实例1:三子棋
数组的应用实例2:扫雷
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
1.一维数组的创建和初始化
数组的创建
数组是什么
数组是一组相同类型元素的集合
-- -- -- -- -- --
数组的创建方式
type_t arr_name[ const_n ] ;
type_t:数组的元素类型
arr_name:数组名
const_n:是一个常量表达式,用来指定数组的大小
例:
int arr1[10];//一个可以存放十个整型元素的数组
int arr2[1];
char arr2[10];
float arr4[2];
int arr5[2];
其中方括号([])只能给常量,不能给变量(常变量也不行)
-- -- -- -- -- -- -- -- -- --
数组的初始化
数组的初始化是指,在创建数组的同时,给数组的内容赋一些合理的初始值
例:
int a[10]={2,3,4};
//a:不完全初始化,剩下的元素默认为0,不初始化里面也默认都是0
char arr[5]={'a','b'};
char arr2[5]="ab";
//arr2:字符串结束标志是'\0'
//给前三个元素赋值了'a','b','\0'('\0'也是0)
char arr3[]="abcdef";
//arr3:不指定大小就必须初始化,会根据初始化内容来确定有几个元素
-- -- -- -- -- -- -- -- -- --
计算数组的大小
#include <stdio.h>
#include <string.h>
int main()
{
char arr4[]="abcdef";
printf("%d\n",sizeof(arr4));//strlen是求字符串长度的,只能针对字符串求长度
printf("%d\n",strlen(arr4));//sizeof计算变量、数组、类型的大小,单位是字节
return 0;
}
运行结果:
7
6
sizeof计算所在空间大小
arr4有'a','b','c','d','e','f'共6个元素 再加'\0'
char类型变量占一个字节,7*1=7
strlen求字符串长度——'\0'之前的字符个数
即计算a b c d e f共6个字符
-- -- -- -- -- --
再来看两种不同写法的数组计算出来的结果
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("%d\n", sizeof(arr1));
printf("%d\n", sizeof(arr2));
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
运行结果:
4
3
3
随机值(如42)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2.一维数组的使用
[]:下标引用操作符
是访问数组的操作符
演示
#include <stdio.h>
int main()
{
int i = 0;
char arr[] = "abcdef";
//打印数组内所有元素
for (i = 0; i < 6; i++)
{
printf("%c ", arr[i]);
}
return 0;
}
运行结果:a b c d e f
-- -- -- -- -- -- -- -- -- --
总结:
数组是使用下标来完成访问的,下标是从0开始的
数组的大小可以通过计算得到
eg:int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]);
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
3.一维数组在内存中的存储
介绍十六进制
十进制:0~9
十六进制:0~9 a b c d e f(a:10 b:11 c:12 d:13 e:14 f:15)
-- -- -- -- -- -- -- -- -- --
数组在内存是怎么存储的
#include <stdio.h>
int main()
{
int i = 0;
char arr[] = "abcdef";
//打印数组内所有元素
for (i = 0; i < 6; i++)
{
printf("&arr[%d]=%p\n ", i, &arr[i]);
//打印地址用%p
}
return 0;
}
运行结果:
&arr[0]=0000009628CFFCD4
&arr[1]=0000009628CFFCD5
&arr[2]=0000009628CFFCD6
&arr[3]=0000009628CFFCD7
&arr[4]=0000009628CFFCD8
&arr[5]=0000009628CFFCD9
结论:数组在内存中是连续存放的
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
4.二维数组的创建和初始化
二维数组的创建
int arr1[3][4];//三行四列
char arr2[3][5];//三行五列
double arr3[2][4];
-- -- -- -- -- -- -- -- -- --
二维数组的初始化
int arr1[3][4]={1,2,3,4,5};
int arr2[3][4]={{1,2},{3,4}};
int arr3[][4]={{2,3},{4,5}};
①int arr1[3][4] = {1,2,3,4,5}
不完全初始化时,若总初始化的元素个数大于列数,会在第一行放满1,2,3,4,然后在第二行放5,剩下不初始化的初始值都是0①
②int arr2 [3][4] = {{1,2,3},{4,5}};
这种写法会在第一行放1,2,3,0,第二行放4,5,0,0,第三行都是0②
③int arr3[][]={1,2,3};//错误的写法
不能同时省略“行”和“列”,最多只能省略“行”不可以省略“列”
如int arr4[][4] = {{1,2,3,4},{5,6,7,8}};
(第一行:1,2,3,4 第二行:4,5,6,7成为一个两行四列的二维数组)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
附
①
②