学习目标:
1.一维数组的创建与初始化
2.一维数组的使用
3.一维数组在内存中的存储
4.二维数组的创建与初始化
5.二维数组的使用
6.二维数组在内存中的存储
7.数组作为函数参数
8.数组的应用实例1:三子棋
9.数组的应用实例2:扫雷游戏
一.一维数组的创建与初始化
1.我们首先来讲数组的创建
概念:数组是一组相同类型元素的集合
数组的创建方式:
type_t arr_name [const_n]
其中 type_t 为数组的元素类型,arr_name为数组名,const_n是一个常量表达式,用来指定数组的大小
下面我们来看一个实例:
要求创建一个整型数组,数组名不限,数组大小为能存放10个整型,代码如下:
#include<stdio.h>
int main(void){
int arr[10];
return 0;
}
下面我们来看几个例子:
代码1:
int main(void){
int arr[10];
return 0;
}
代码2:
int main(void){
int n = 10;
int arr[n];
return 0;
}
代码3:
int main(void){
char arr1[10];
float arr2[20];
double arr3[30];
return 0;
}
我们依次运行后可以发现除了代码2,其余代码都可以完成编译并运行,那为什么代码2会出现问题呢?
我们将其放到编译器中编译,可以发现编译器抛出以下错误:
我们发现编译器告诉我们,在定义数组大小的时候,必须要使用常量表达式,而这里的n是变量,所以程序报了错,这也告诉我们在定义数组大小的时候需要使用常量表达式
2.数组的初始化
概念:数组的初始化是指,在创建数组的同时给数组的内容一些合理的初始值,如下代码:
int main(void){
int arr1[5] = {1,2,3};
int arr2[] = {1,2,3,4,5,6};
char arr3[10] = {'a','b','c'};
char arr4[] = { 'd', 'e',96};
char arr5[20] = "hello my friend";
return 0;
}
补充:
int arr1[5] = {1,2,3};
这种代码称为不完全初始化,我们对代码进行调试的时候可以在监视窗口中监视数组arr1的元素,如图所示:
我们可以看到,程序只初始化了前三个元素,剩下的的元素默认被初始化为0
我们再来看这两句代码:
char arr1[3] = {'a','b'};
char arr2[] = "ab";
这两段代码执行后效果是一样的,但是执行的流程却有区别,第一句代码是将a b分别存入元素中,第二句代码除了将a b传入元素中,还将 '\0'(因为这是一串字符串) 也一并存入到数组的元素中,所以我们需要有所区别
3.sizeof()与strlen()的区别
我们来看一段代码:
#include<stdio.h>
#include<string.h>
int main(void){
char arr[] = "abcdef";
printf("sizeof = %d\n", sizeof(arr));
printf("strlen = %d\n",strlen(arr));
getchar();
return 0;
}
我们运行上述代码后可以发现,程序输出了7和6,我们先来看sizeof(),我们前面讲过sizeof()是用来计算变量/数组/类型所占空间的大小的,在此代码中,数组的元素一共有7个,分别是: a b c d e f \0 每一个字符占用内存一个字节,那么七个字符就占用了内存7个字节,而strlen()是用来计算字符串长度的,strlen()只会统计到 a b c d e f ,注意 \0 并不会被strlen()函数计算在内,也就是使用strlen()函数来计算字符串长度的时候,只会计算到 \0 之前的字符个数
最后我们再来对这两个函数做一个总结:
1.strlen()与sizeof()两个函数并无关联
2.strlen()是计算字符串长度的函数,其函数只能求字符串
3.sizeof()是用来计算 变量/数组/类型大小的函数,其单位是字节
4.strlen()使用的时候需要包含头文件<string.h>,而sizeof()由于是操作符,所以可以直接使用
2023/8/20
王起舟