C数组

使用数组可以同时定义一组相同类型的变量。

定义

语法:

类型 变量名[元素数量] = {初始值1,初始值2,初始值n}
int a[5];//定义包含5个元素的数组,未初始化

int b[5] = {1,2,3,4,5};//定义包含5个元素的数组,初始化为1~5

int c[5] = {1,2};//定义包含5个元素的数组,将前两个元素赋值为1,2,后3个元素为0

int d[5] = {0};//定义包含5个元素的数组,全部初始化为0

//int e[5] = {1,2,3,4,5,6};//编译错误,元素过多。

int f[] = {1,2,3};//定义包含3个元素的数组,初始化为1,2,3。

操作数组元素

语法:

数组[下标]
int a[5] = {1,2,3,4,5};
int i = a[1];//访问数组的第2个元素
a[2] = 100;//为数组的第3个元素赋值

计算5个整数的最大值

int a[5] = {0};

int i = 0;

printf("请输入5个整数\n");
for (i = 0; i < 5; i++) {
    printf("请输入第%d个整数:", i + 1);
    scanf("%d", &a[i]);
}

int max = a[0];//最大值
int p = 0;//最大值编号

for (i = 1; i < 5; i++) {
    if (a[i] > max)
    {
        max = a[i];
        p = i;
    }
}

printf("第%d个整数最大,值是%d\n", p + 1, max);

越界操作

当访问数组元素时,如果下标超过数组定义范围,就会产生越界访问。

C语言在运行时不对越界访问进行任何检查,所有检查都需要开发者自己进行。

越界访问可能会读写意想不到的内存,是一定要避免的。

二维数组

数组元素本身也可以是数组。这种元素自身也是数组的数组,是二维数组。

语法:

类型 变量名称[l1][l2] = {
    第一行数组,
    第二行数组,
    第n行数组
};

int a[3][3] = {
    {1,2,3},
    {4,5,}//这一列没有全部初始化
};//最后一列没有初始化

int a2[3][3] = {1,2}//只初始化数组的第1行的前2列

int a3[3][3] ={0};//全部元素初始化为0

操作二维数组

语法:

a[i1][i2]
int a[2][3] = {
    {1,2,3},
    {4,5,6}
};

a[1][1] = 20;//赋值第`1*3+1+1=5`个元素
int j = a[1][2];//访问第`1*3+2+1=6`个元素,值为6

int k = a[0][3];//下标超过范围。访问的是第`0*3+3+1=4`个元素,值为6

多维数组

数组的维数可以是任意数量。超过二维的数组叫做多维数组。

语法:

类型 变量名称[l1][l2]...[ln] =
{
    第2维数组1,
    第2维数组2
}

一般很少使用超过3维的多维数组。

int a[2][2][2] =
{
    {
        {1,2},
        {3,4}
    },
    {
        {5,6},
        {7,8}
    }
}

int b[2][2][2] = {1,2,3,4,5,6,7,8};

int c[2][2][2] = {0};

操作多维数组

语法:

a[i1][i2][i3]...[in]
a[1][1][1] = 10;
int j = a[1][1][1];

练习