我们先来简单介绍一下数组;数组分为一维数组,二维数组以及多维数组。我们着重看一下一维和二维数组;
一,1, 数组的格式
数组类型 数组名 [常量表达式]
#define Maxlen 100
int str[Maxlen],nt str1[10];
2,数组的初始化方式
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a[]={1,2,3,4,5];,int a[5]={1,2,3];后面自动补零 a[3]=0,a[4]=0。
字符数组的初始化
char str[20]="hello world!"别后面还有一个结束标志‘\'。注意越界访问
char str[20]={"hello world!"}
char str[]="hello world"
char str[]={'h','e','l','l','o','\0'}
3,二维数组
int a[i][j]; i表示行,j表示列。
二维数组的初始化
二维数组与一维数组一样,可以对二维数组的元素进行赋值或者初始化。二维数组初始化的方法如下:
⑴分行给二维数组赋初值。
int a[2][3]={{1,2,3},{5,6,7}}; 第一个内花括号的值赋给数组的第一行,第二个内花括号的值赋给数组的第二行。
⑵所有数据写在一个花括弧内,按顺序赋初值。
int a[2][3]={2,3,5,6,7,8};它将第一组3个数赋给数组的第一行,第二组3个数赋给数组的第二行。该方法相对简单,但是,当数组元素较多时,容易出现混乱、遗漏、出错。在行、列数较多时,使用第一种方法较好。
u ⑶对于定义的静态存储(关键字为static)数组,如果没有赋初值,则系统自动将全部元素赋以0值或‘\0’值。
u
u 如:static int a[2][2];
相当于static int a[2][2]={0,0,0,0}
u
u 而对定义的int a[2][2];如果不对其赋初值,则数组中各元素的值是不确定的。
⑷对部分元素赋初值
数组在对部分元素赋初值时,如果后面的数组元素不赋初值,系统会对所有数组元素自动赋以0值。
如:int a[2][3]={{0,2},{1}};
相当于:int a[2][3]={{0,2,0},{1,0,0}};。
再如:static int d[2][3]={{8,5},{9}};
相当于:static int d[2][3]={{8,5,0},{9,0,0}};。
又如:int b[2][3]={1,0,3};相当于:
int b[2][3]={1,0,3,0,0,0};。
⑸如果对全部元素都赋初值时,则定义数组时,第一维(行)的长度可以不指定,但第二维(列)的长度不能省需要指定。
如:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}
等价于:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12
⑹键盘输入赋值
通过键盘输入二维数组的数组元素,一般需要使用二重循环的形式进行。可以先行输入,也可先列输入。
①先行输入方式
int a[3][4];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf(“%d”,&a[i][j]);
②先列输入方式
int a[3][4];
for(j=0;i<3;j++)
for(i=0;i<2;i++)
scanf(“%d”,&a[i][j]);
说明:不管是先行输入,还是先列输入,在计算机存储中数组元素仍然是按行存储的。
⑺通过赋值语句赋初值
如:int a[2][2]; a[0][0]=1; a[0][1]=2; a[1][0]=3; a[1][1]=4;。
⑻在定义数组时也可以只对部分元素赋值,而省略第一维的长度,但应使用分行赋值方式。
如: int a[][4]={{1},{3,1},{0,0,9}};
它与 int a[3][4]={{1},{3,1},{0,0,9}}; 等价。
注:错误的初始化定义:
int a[3][3]; a={1,2,3,4,5,6,7,8,9}; 这是错误的。
而int a[3][3]; a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 也是错误的赋值方式。
二,sizeof和strlen的区别
sizeof为字节统计,strlen是字符长度统计函数
我们都知道;在32位平台上,一个整形数组里面每一个单元所占字节数为4,unsigned short int里面为2,指针数组里面的每一个单元所占字节数也为4,字符型数组里面每一个单元所占字节则为1,对于实型 float为8,double和Long double则为8。
int a[5]={1,2,3,4,5}
sizeof(a)=4*5=20
char str[10]={"hello"}
sizeof(str)=10,strlen(str)=5