构造类型:把基本的数据类型(int char double float)进行一些变换得到数据类型。
1、一维数组定义方式
定义方式:
类型说明 数组名字 [常量表达式]
int a[10];
//定义了一个一维数组,名字a,这个数组由10个元素,说明:
a.数组名字其实是
变量名,比如上边的这个a;
b.数组名后边的方括号括起来的常量表达式,比如上边这个[10],不能写成 int a(10); 必须是:int a[10]
c.常量表达式
一般是个数字,但是你要非写个2*5也可以,但是不如10来的实在。
d.a[10] 中的数字10,表示a数组中由10个元素,
下标是从0开始,
这10个元素是a[0] a[1] a[2] ....a[9],千万要注意,不包 括 a[10] 的。0 —(10-1) 这是一个极其容易和犯错误地方, 如果定义 int a[100]; 能引用的就是 a[100]; 能引用的 就是 a[0].....a[99] ;
e.可以给 a[10]复制,语法上没错,但是这个赋值就会产生极大的程序隐患,因为 a[10] 的内存并不属于你能控制的内 存,但是你却往这个内存地址写了数据,结果很可能导致你把程序中其他某个用到这个内存地址的变量给覆盖掉 了; 轻则导致程序运行的并不是你想象的结果,重则导致你的程序不定时的彻底崩溃,极其难排查原因。
g.常量表达式中,可以是常量表达式,但
不能包含变量;就是说,c语言不允许对数组的大小做动态定义,也就是说数组 大小不能依赖于程序运行过程中的变量的值;定义数组的时候,
数组的大小是写死的。
h.int[10] 相当于我们定义了10个整型变量 a[0]~a[9] ,那如果我们想定义1000个变量,int[0]~int[1000] ,能引用的元素 a[0]~a[999];
引用方式:
c语言规定,
只能引用数组中的元素,
不能引用整个数组;
int a[10];
a[0]=5;
所以数组元素的表现形式为:
数组名 [下标] ,
下标一般都是整型变量;
int i,a[10];
for(i=0;i<=10;i++)
{
a[i]=i;
}
for(int i=0;i<=9;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
一维数组的初始化:
int a[10] = {8,5,43,5,2,5,7,2,9,7}; //正好10个数字,用大括号括起来,每个数字之间用
逗号(,)分开,这样初始化a[0]--a[9]就都有值了。
可以一部分数组元素赋值,
可以不指定数组长度。
int a[] = {1,2,3,4,5};
在定义数组的时候,当[]里面没有数字时,系统会猜测你这个数组赋初值这个语句里面有多少个值。有多少个值,这个数组的长度就是多少。当被定义的数组长度与提供初值的个数不相同时,则数组长度则不能省略。
2、二维数组定义方式
二维数组 [ ][ ]
一般形式
:
类型说明符 数组名 [常量表达式] [常量表达式]
int a[3][4]; //注意这里不能写成a[3,4]; 理解成 a是一个3行4列的数组; [0]~[2]
//第一维下标范围:[0]~[2] 三个元素,每个元素是一个包含4个元素的一维数组。
//第二维下标范围:[0]~[3] 整个这个二维数组能够引用元素。
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]
int b[5][8]; //5行8列的一个组
int a[2][3][4]; //三维数组(多维数组),在内存中排列顺序:第一维下标变化最慢,最右边的下标变化最快。
二维数组的引用
:
数组名[下标][下标] a[0][1], a[5-4][3-1], 注意不要写成 a[0,1] ==> a[0][1]
int a[5]; //a[0]~a[4]
int b[3][4]; // 第一维下标范围0--2,第二维下标范围0--3
b[3][4] =5; //错误,b[2][3] =5;
b[3][0] =89; //错误,b[2][0] =89;
b[1][4] =78; //错误,b[1][3] =78;
int a[3][4];
int i,j;
for(i=0;i<3;i++) //0,1,2
{
for(j=0;j<4;j++) //0,1,2,3
{
a[i][j]=i*j;
}
}
//上面是用循环给二维数组赋初值,下面打印输出二维数组
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
}
}
//利用 shift + F5 可以输入二维数组单个元素进行查看值
二维数组的初始化
:
a)、分行给二维数组赋初值
int a[3][4] ={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};
b)、将所有数据放在一个大括号里面
int a[3][4] ={ 1,2,3,4,5,6,7,8,9,10,11,12};
c)、对部分元素赋初值
int a[3][4] ={ {1},{3,4}};
d)、可以第一维数组不设置值
int a[][4] ={ {0,0},{},{3,10}};
评论列表(0条)