本章重点:
1.一维数组的创建和初始化
2.二维数组的使用
3.一维数组在内存中的储存
4.二维数组的创建和初始化
5.二维数组的使用
6.二维数组在内存中的储存
7.数组作为函数参数
8.数组的应用实例1:三子棋
9.数组的应用实例2:扫雷游戏
正文开始
一维数组的创建和初始化
数组的创建
数组是一组相同类型元素的集合。数组的创建方式:
type_t arr_name [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
注:重点:
数组常见,【】中要给一个常量才可以,不能使用变量,
数组的初始化
数组的初始化是指,在创建十足的同时给数组的内容一些合理的初始值(初始化)
数组中没有被初始化的数是0。
sizeof可以用来计算数组所占空间的大小;
strlen可以求字符串的长度,在遇见“\0”时停止,不加“\0”;
sizeof和siaeof没有什么联系;
strlen只能用来求字符串的长度;
sizeof可以计算变量、数组、类型的大小,这个大小的单位时字节;
int 型通常占4个字节,char型通常占一个字节。
strlen是库函数,在使用时要引用头文件,但是sizeof是一个操作符,在使用时不需要引用头文件。
一维数组的使用:
对于数组的使用我们之前介绍了一个操作符:【】,下标引用操作符。
1.数组是使用下标来访问的,下标是从0开始的。
2.数组的大小是可以通过计算得出的。
例如:
#include<stdio.h>
int main()
{
int arr[10];
int sz=sizeof(arr)/siazof(arr[0]);
return 0;
}
一维数组在内存中的储存:
随着数组下标的增长,元素的地址也在有规律的递增。由此可得出结论:数组在内存中是连续存放的。
二维数组的创建和初始化
二维数组的创建
int arr[][];
//第一个方框中是代表行,第二个方框中是代表列。
二维数组的初始化:
当二维数组不完全初始化时,后面默认的数为零。
二维数组中行可以省略,但是列不能省略。
二维数组的使用
数组作为函数参数:
往往我们在写代码的时候,会将数组作为参数传给某一个函数,例如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个函数整型数组排序。那我们将会这样使用该函数:
冒泡排序函数的错误设计
冒泡排序的核心思想:
两两相邻的元素对他进行一个比较。
//冒泡排序
#include<stdio.h>
void hanshu_(int se,int arr1[])
{
int a, b,temp;
int c = 1;
for (a = 0; a <se-1; a++)
{
for (b = 0; b < se-1-a; b++)
{
if (arr1[b] > arr1[b+1])
{
temp = arr1[b];
arr1[b] = arr1[b+1];
arr1[b+1] = temp;
c=0;
}
}
if (c == 1);
break;
}
int i;
for (i = 0; i <= se - 1; i++)
{
printf("%d", arr1[i]);
}
}
int main()
{
int arr[] = {0,1,2,3,4,5,6,7,8,9};//对这个数组里面的数字进行升序排列
int se = sizeof(arr)/sizeof(arr[0]);
printf("对arr数组里面的数字进行升序排列我们的到了一串新的数组");
hanshu_(se,arr);
return 0;
}
数组名是什么:
通常情况下数组名是代表首元素的地址,但是存在两个例外条件:
siaeof(数组名),此时此此刻数组名代表整个数组,siaeof计算的是整个数组的大小,单位是字节。
&数组名,数组名代表的是整个数组,&数组名,取出的是整个数组的地址。
数组的地址和数组首元素地址的区别是什么:
数组的地址和数组首元素的地址在值上面是完全一样的,但是意义完全不一样。