1.数组的概念
数组是⼀组相同类型元素的集合
数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
数组中存放的多个数据,类型是相同的。
2. ⼀维数组的创建和初始化
2.1 数组创建
基本语法:
type arr_name[常量值];
type指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以自定义的类型
•arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就⾏。
[ ] 中的常量值是⽤来指定数组的大小的,这个数组的⼤⼩是根据实际的需求指定就⾏。
char ch[8];
double score[10];
2.2 数组的初始化
数组在创建的时给定⼀些初始值,称为初始化。
数组的初始化⼀般使用大括号,将数据放在大括号中。
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
2.3 数组的类型
数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型。
int arr1[10];
int arr2[12];
char ch[5];
arr1数组的类型是 int [10]
arr2数组的类型是 int[12]
ch 数组的类型是 char [5]
3. ⼀维数组的使用
3.1 数组下标
C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下 标就相当于数组元素的编号,如下:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
对应的下标为1-9
[ ]叫做下标引用操作符,例如arr[7]为访问下标为7的元素
printf(%d,arr[7]);
3.2 数组元素的打印
访问数组中所有元素,使用for循环,访问所有下标
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
printf(" %d\n", arr[i]);
}
3.3 数组的输入
使用for循环输入数组值
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
scanf("%d", &arr[i]);
for (i = 0; i < 10; i++)
printf("%d\n", arr[i]);
}
3.4数组元素个数
在初始化时,[ ]中的数字即为数组元素的个数,如果没有写的话,后方{ }中有几个元素,数组中就有几个元素
int arr1[5]={0};//元素个数为5
int arr2[]={1,2};//元素个数为2
4.sizeof计算数组元素个数
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("%zd\n", sizeof(arr));//sizeof(数组名),计算整个数组大小,单位是字节
printf("%zd\n", sizeof(arr[0]));//计算的是一个元素占据空间的大小,单位是字节
printf("%d\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
结果为40,4,10
strlen-求字符串长度,只针对字符串
5. 二维数组的创建
5.1 ⼆维数组的概念
前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元 素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。
5.2 ⼆维数组的创建
定义二维数组
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];
double data[2][8];
• 3表⽰数组有3⾏
• 5表⽰每⼀⾏有5个元素
• int 表⽰数组的每个元素是整型类型
• arr 是数组名,可以根据⾃⼰的需要指定名字
6.二维数组的初始化
二维数组初始化时如果只有一个 { },那么初始化时从第一行开始初始化,未初始化的默认为零
如果 { }中有 { },则依次初始化每一行
int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};//完全初始化
int arr[3][5] = { 1,2};//不完全初始化,其余默认为零
int arr[3][5] = { {1,2} {3,4} {5,6} };//每一行都进行初始化,第一行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}};
会根据给出的列数和元素确定行数
7.二维数组的使用
7.1二维数组的下标
二维数组的下标与一维数组相同,行和列都是从0开始的。
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
printf("%d\n", arr[2][4]);
return 0;
}
输出结果为7
7.2⼆维数组的输⼊和输出
#include <stdio.h>
int main()
{
int arr[3][5] = { 0 };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
输入与输出结果
二维数组在内存中也是连续的,一行存完存下一行
strlen 求长度不包括\0
练习
练习1:多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include<Windows.h>
int main()
{
char arr1[] = "please click like if you like my blog";
char arr2[] = "#####################################";
int left = 0;
int right = strlen(arr1) - 1;//如果使用sizeof需要减2,因为sizeof会把/0也算作一个字符
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
printf("%s", arr2);
return 0;
}