问题
对于数组来说有类型的概念吗?数组中的元素只能是变量(int,float,ect.)吗?
数组类型
-数组类型由元素类型和数组大小共同决定
-数组类型的具体表现类型为:type[N]
int a[10]={0}; //类型:int[10]
float b[5]={0}; //类型:float[5]
int aa[5]={0}; //类型:int[5]
int bb[8]={0}; //类型:float[8]
int c[10]; //类型:int[10]
int i;
for(i<0;i<10;i++)
c[i]=a[i]; //相同类型数组的“赋值操作”
实践操作
- 数组中的元素可以是变量,也可以是其它程序元素
- 当数组中的元素是另一个数组时,就构成了多维数组
- c语言中的二维数组定义:type Name[N1][N2]
- 二维数组可看作数学中的矩阵
a11 a12 ... a1n
a21 a22 ... a2n
.... ... ... ...
am1 am2 ... amn
- 注意
二维数组的本质还是就是数组,即:数组中的每一个元素是数组!!
int a[3][4] //定义一个数组,数组中有3个元素
//每个元素的类型为 int[4]
(a[1])[2]=2; //对第1个数组中的第2个变量赋值
a[2][3]=2; //对第2个数组中的第3个变量赋值
a[3][0]=0; //越界
a[0][4]=0; //越界
二维数组的初始化
-方式一:int [2][3]={ {1,2},{4,5}};
-方式二:int [2][3]={1,2,3,4};
-方式三:int [2][3]={0};
-方式四:int a[ ][3]={ {1,2,3},{4,5,6}};
- 方式五:int a[ ][3]={1,2,4,5};
注意
-二维数组能且仅能让编译器自动确定第一维的大小
-第二维大小必须显示给定,即:数组元素的类型必须正确合法
-第一维大小自动确定的方法:(初始值个数除以第二维大小)向上取整
int a[][3]={1,2,3,4};
int s1=sizeof(a) / sizeof(a[0]);
int i=0;
int j=0;
for(i=0;i<s1;i++)
{
for(j=0;j<3;j++)
{
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
}
}
实践操作
多维数组
-三维数组定义:一个数组,每个元素为一个二维数组
语法:type Name[N1][N2][N3];
-四维数组定义:一个数组,每个元素为一个三维数组
语法:type Name[N1][N2][N3][N4];
小结
- 数组类型由元素类型和数组大小共同决定(type[N])
- 数组中的元素可以是变量,也可以是其它程序元素
- 当数组中的元素是另一个数组时,就构成了多维数组
- 二维数组能且仅能让编译器自动确定第一维的大小