一、概述
- 数组是一组有序数据的集合;
- 数组中的每一个元素都属于同一类型;
- 通过数组和下标来唯一的确定数组中的元素。
二、一维数组
2.1 一维数组的定义
类型说明符 数组名[常量表达式]
数组名是一个常量,不能对它进行赋值。
2.2 一维数组的引用
数组名[下标];
2.3 一维数组的初始化
- 在定义数组时对全部数组的元素赋予初值; int a[5]={1,2,3,4,5};
- 给一部分数组元素赋值,但是数组大小必须写出来,其余成员默认为0; int a[5]={1,2,3};
- 给一个数组全部元素赋0; int a[5]={0};
- 可以不写数组的长度,但是数组中所有元素要写出来; int a[]={1,2,3,4,5};
2.4 案例实战
求斐波那契数列前20项的值
#include<stdio.h>
int main()
{
int i;
int Fb[20]={1,1};
for(i=1;i<19;i++){
Fb[i+1]=Fb[i]+Fb[i-1];
}
for(i=0;i<20;i++){
printf("%d ",Fb[i]);
}
return 0;
}
结果如下:
三、二维数组
3.1 二维数组的定义
类型说明符 数组名[常量表达式][常量表达式]
- 二维数组可以看做是特殊的一维数组,a[0]、a[1]、a[2]可以看做特殊的一维数组,a[0]、a[1]、a[2]是其数组名
- 二维数组在内存中元素是连续存放的,二维只是逻辑上的概念。
3.2 二维数组的引用
数组名[下标][下标];
3.3 二维数组的初始化
- 分行给二维数组赋值;a[2][2]={{1,2},{3,4}};
- 将所有的数组写在一个花括号内; a[2][2]={1,2,3,4};
- 可以对部分元素赋初值;a[2][2]={{1},{3}};
- 第一维的长度不指定,但是必须指定第二维的长度,不然数组大小无法确定; a[][2] ={1,2};
3.4 案例实战
有一个3X4矩阵,求出最大元素的值,以及所在的行号和列号
#include<stdio.h>
void initArry(int (*p)[4])
{
int i;
int j;
printf("please input the number of the arry\n");
for(i=0;i<3;i++){
for(j=0;j<4;j++){
scanf("%d",*(p+i)+j);
}
}
}
void maxArry(int (*p)[4])
{
int i;
int j;
int row;
int col;
int max;
max=*(*p);
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(max<*(*(p+i)+j)){
max=*(*(p+i)+j);
row=i+1;
col=j+1;
}
}
}
printf("the max number is %d,row:%d,col:%d\n",max,row,col);
}
int main()
{
int a[3][4];
initArry(a);
maxArry(a);
return 0;
}
运行结果
四、总结
- 一维和二维数组名可以看成是指向数组首个元素的指针,但是其是指针常量,不能对其进行赋值
- 二维数组a[0]、a[1]看成是指向第1行,第2行首个元素的指针。