1 一维数组
数组:具有相同数据结构的元素组成的有序的数据集合。
数组元素:组成数组的数据。
数组下标:区分数组元素的特定序号。
C语言中,数组下标从0开始,第n个元素的下标是n-1,依次类推。
数组是一种构造类型的数据,其组成元素可以是任何数据类型(包括复合类型)。
数组变量需要先定义,后使用。定义数组变量时,系统会为数组在内存中分配一块连续的空间进行存储,空间的大小由数组的类型和大小而定。
2 一维数组的定义
只有一个下标的数组。
定义方式:
类型 数组名[常量表达式]
例如:
int a[10]; char str[50];定义数组下标的常量表达式只能是整型常量,如:
#define 100 n … int m[100]; char str[n];不能使用变量名作为数组定义时的下标,如:
int n=100; char str[n]; /*错误的定义方式*/
数组赋初值:
int a[5]={1,2,3,4}; /*数组元素 a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=0*/ char s[5]={‘a’,’b’,’c’}; int m[]={1,2,3,4,5};
3 一维数组的引用
只能对数组的某一个元素进行单独的访问,引用形式如下:
数组名[下标]
这里的下标可以是一个整型常量,也可以是一个已赋值的整型变量、整型值表达式或者整型符号常量。
例如:
int a[5],n; n=3; a[0]=1; a[n]=a[n-1]+a[n-2];
数组名a不能代表整个数组的具体值,只代表数组在内存中的首地址,即代表数组元素a[0]在内存中的地址。
数组名在程序中不能改变,不能对a进行表达式运算,如a++,a=n等等。
C语言本身不会对数组做边界检查,数组下标越界需要程序员自己设定。
4 多维数组的定义
由2个下标确定元素的数组称为二维数组,由3个或3个以上下标确定元素的数组称为多维数组。
二维数组定义方式如下:
类型 数组名[常量表达式1 ][常量表达式 2]
如:
int a[3][4]
这是一个3行4列矩阵
元素赋值:
int a[3][4]={0,0,0,0,1,1,1,1,2,2,2,2};
也可以按行赋值:
int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };
2维数组可以理解为一维数组的一维数组。
N维数组可以理解为N-1维数组的一维数组。
5 多维数组的引用
只能对单个元素逐一进行引用。
例如:
int a[3][4],b[10][10],i,j; a[i][j+1]=a[i][j-1]+a[i][j];
多维数组在内存中的地址是按行序排列的。
6 字符数组与字符串
(1) 字符数组
数组元素类型为字符型的数组,主要用于存储一串连续的字符。
char 数组名[]; /*定义一维字符数组*/ char 数组名[][]; /*定义二维字符数组*/
例如:char str[10]; char str1[3][10];赋值:
char str[7]={‘T’,’h’,’i’,’s’,’ ’,’i’,’s’};
char s[][2]={{‘T’,’h’},{‘a’,’b’}};
(2) 字符串由双引号括起来的字符序列,例如:
“This is a test!”
程序在定义字符串时会在每个字符串的后面自动加上一个空操作符’/0’以示区别,但是在计算字符串长度时,’/0’不会计入字符串长度中。
’/0’作为字符串的结束标志而存在,’/0’会占用一个元素的存储空间,所以在定义字符串数组时,应在字符串长度基础上增加一个元素,存储’/0’。
char m[]={'a'}; char m[]={“a”};
以上2行代码表示的意思是不一样的,后者等价于
char m[]={'a','/0'};