周游C语言教程8 - 数组
这是周游C语言的第八篇教程,你将在这篇文章里认识数组。
数组
数组就是一组相同的数的集合,数组的声明并不是声明一个个单独的变量,比如a0、a1、…、a99,而是声明一个数组变量,比如 a,然后使用 a[0]、a[1]、…、a[99] 来代表一个个单独的变量。
数组在内存中是连续的。
第一个元素 | 第二个元素 | 第三个元素 | … | 最后一个元素 |
---|---|---|---|---|
a[0] | a[1] | a[2] | … | a[99] |
声明数组
在声明数组时需要定义数据类型,数组名称和数组大小,数组大小需要用方括号包裹
数据类型 数组名称[数组大小];
比如有5框苹果,我们就可以声明成
int apple[5];
数组初始化
数组可以使用以下方式进行初始化
int apple[5] = {1,2,3,4,5};
这样就将apple这个数组的每个成员都单独进行了赋值
apple[0] | apple[1] | apple[2] | apple[3] | apple[4] |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
单独进行赋值的时候可以将数组长度省略,这样编译器将会自动把给数组计算长度
int apple[] = {1,2,3,4,5};
访问数组
数组名[索引号]
的形式可以访问数组,索引号需要从0开始。比如apple[0]表示apple数组的第一个元素。
下列代码将计算苹果的总数,并将苹果平分给每个框
#include <stdio.h>
int main()
{
int apple[5] = { 1,2,3,4,5 };
int i = 0;
int total = 0;
for (i = 0; i < 5; i++)
{
total += apple[i];
}
printf("一共有%d个苹果\n", total);
for (i = 0; i < 5; i++)
{
apple[i] = total / 5;
printf("第%d个框现在有%d个苹果\n", i+1, apple[i]);
}
}
多维数组
C语言支持多维数组,其声明形式如下
数据类型 数组名称[第一维长度size1][第二维长度size2][...][第n维长度sizen];
多维数组一共包含了size1size2…*sizen个变量。
int apple[3][5][4];
以上声明表示一个3.5.4维的数组
二维数组
我们以最简单的二维数组为例,定义一个
int apple[3][5];
我们给它赋予一个现实意义,一共有3间房子,每间房子都有5框苹果。
第一筐 | 第二筐 | 第三筐 | 第四筐 | 第五筐 | |
---|---|---|---|---|---|
第一间房子 | apple[0][0] | apple[0][1] | apple[0][2] | apple[0][3] | apple[0][4] |
第二间房子 | apple[1][0] | apple[1][1] | apple[1][2] | apple[1][3] | apple[1][4] |
第三间房子 | apple[2][0] | apple[2][1] | apple[2][2] | apple[2][3] | apple[2][4] |
初始化二维数组
int apple[3][5]={
{1,2,3,4,5},
{3,2,1,4,5},
{2,5,3,4,1}
};
其中,花括号可以省略
int apple[3][5]={1,2,3,4,5,3,2,1,4,5,2,5,3,4,1};
访问二维数组
同样可以用数组名加索引号的方式进行访问。
int a = apple[1][3];
表示访问第2个房间第4筐(索引号从0开始)
#include <stdio.h>
int main()
{
int apple[3][5] = {
{1,2,3,4,5},
{3,2,1,4,5},
{2,5,3,4,1}
};
int i, j = 0;
int total = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
total += apple[i][j];
}
}
printf("一共有%d个苹果\n", total);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
apple[i][j] = total / 5 / 3;
printf("第%d个房间第%d个筐现在有%d个苹果\n", i+1, j+1, apple[i][j]);
}
}
}