今天学习数组
目录
一、数组的概念
数组是一组相同类型元素的集合;从这个定义中我们可以知道:
- 数组中存放的1个或者多个数据,但数组元素个数不能为0。
- 数组中存放的多个数据,类型是相同的。
数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
二、一维数组的创建和初始化
2.1数组创建
一维数组创建的基本语法如下:
type arr_name[常量值];
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
比如我们可以创建如下的数组:
int math[5];
char ch[8];
double[6];
2.2数组的初始化
有时候数组创建时,需要一些初始值,这就被称为初始化
数组的初始化:
int arr[5] = {1,2,3,4,5};//完全初始化
int arr[5] = {1,2,3,4};//不完全初始化,剩余的一个元素为0
int arr[5]= {1,2,3,4,5,6,7};//错误的初始化,初始化项太多,超过了5项
2.3 数组的类型
数组是有类型的,数组算是一种自定义类型,去掉数组名字留下的就是数组类型
int arr[5];//类型是 int [5]
三、一维数组的使用
学习了基本的数组语法,一维数组可以存放数据,存放数据的目的是对数据的操作,我们如何使用一堆数组呢?
3.1 数组下标
C语言中规定数组是有下标的,下标是从0开始的,最后一个元素的下标是n-1,下标相当于数组的元素编号。
int arr[5] = {1 ,2 ,3 ,4 ,5};
//下标分别是0,1,2,3,4
在C语言中数组的访问提供了一个操作符[],这个操作符叫:下标操作符。有了下标操作符,我们就可以轻松访问数组的元素了。比如访问下标为4的元素,我们就可以使用arr[4]。代码如下:
我们就打印出了下标为4的元素,5
3.2数组元素的打印。
如果我们想打印整个数组的内容,我们只需要产生所有数组的下标,并打印出来就可以了,因此可以用循环来实现。代码如下:
3.3数组的输入
明白了数组的访问,我们也要根据自己的需求,给自己想要的数组输入数据。可以用scanf函数和循坏来实现输入和打印。代码如下:
四、sizeof计算数组元素个数
在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?答案是有的,可以使用sizeof。sizeof中C语言是一个关键字,是可以计算类型或者变量大小的,其实sizeof也可以计算数组的大小。比如:
这里结果是20,计算是数组所占内存空间的大小,单位是字节。每个元素占4个字节。我们又知道所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的元素个数就能算出来。因此,代码如下:
这里结果是10,表示数组有10个元素。
五、二维数组的创建和初始化
5.1二维数组的概念
前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组
5.2二维数组的创建
int i[3][5];
- 3表示数组有3行
- 5表示每一行有五个元素
- int 表示数组的每个元素是整型类型
- i 是数组名,可以根据自己需要指定名字
5.3二维数组的初始化
//不完全初始化
int arr1[3][5]={1,2};
int arr2[3][5]={0};
//完全初始化
int arr3[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
//按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
int arr5[][5]={1,2,3};//初始化时行省略,列不能省略
int arr6[][5]={1,2,3,4,5,6,7};
int arr7[][5]={{1,2},{3,4},{5,6}};
六、二维数组的使用
6.1二维数组的下标
二维数组的访问也是使用的下标形式的,二维数组有行和列,只要锁定了行和列就能唯一锁定数组中的一个元素。C语言规定,二位数字的行和列都是从0开始的。我们可以快速定位一个第二行,第四列的元素。代码如下:
6.2二维数组的输入和输出
访问二维数组的单个元素我们知道了,那么如何访问整个二维数组呢?
我们依旧可以运用循环来实现,代码如下:
6.3练习
最后,做一道练习题吧!
练习:多个字符从两端移动,向中间汇聚。编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
char arr1[] = "welcome to here!!!!!!";
char arr2[] = "*********************";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//休眠,单位是毫秒
system("cls");//用来执行系统命令的
left++;
right--;
}
printf("%s\n", arr2);
//char arr[] = "abc";
//printf("%d\n", strlen(arr));
return 0;
}
今天就到这里了。
你说你想逃开松手,爱太累爱得不自由
因为我给不起最简单的承诺,你停止收讯号
我开始搜寻不到,到底有谁知道
是几点钟方向,你才会收到暗号