数组

数组

1.一组具有相同数据类型且连续存放的变量集合

(1)一组变量

(2)类型相同

(3)连续存放

定义数组  

类型名  数组名[整型常数表达式](表示元素个数必须是常量)

数组元素的引用

数组名[下标] 通过下标引用数组元素,从而得到数组中的一个变量下标是整型或字符型的常量、变量或表达式

说明:

定义数组的常量表达式必须是大于零的正整数

数组必须先定义,后使用

数组中的元素就是一个变量,代表一个存储单元,可以做普通变量所做的任何运算和操作

只能逐个引用数组元素不能整体引用

引用时不能越界,如num[5]是不存在的。但系统不会检查,可能破坏其他数据,导致系统运行错误。

数据的初始化

实现的方法:

在定义数组时对数组元素赋初值

int a[5]={1,2,3,4,5};

等价于: a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;

只给一部分元素赋值

如: int a[5]={6,2,3};

等价于:a[0]=6; a[1]=2; a[2]=3;a[3]=0;a[4]=0;

数组元素值全部为0

int a[5]={0,0,0,0,0};

int a[5]={0};

对于整个数组元素赋初值来说,可以不指定长度。

int a[]={1,2,3,4,5,6}

编译系统根据初值个数确定数组大小

一维数组和指针

一个数组存储在一块连续内存单元中,数组名就是这块连续内存单元的首地址,其值不可变

第(i+1)个数组元素的地址可表示为&data[i]或(data+i)。

可以通过以下方式为指向数组的指针赋值:

int a[10];

pa=&a[0];或者pa=a;

一个指针变量可以指向一个数组元素

int *ptr, data[10];

ptr=data+3

或者ptr=&data[3]

用带下标的指针变量引用一维数组元素

(1)s[i]//s是数组名,就是普通数组的表示方法。

(2)*(s+i)//s是数组名,因为系统规定数组名代表的是一维数组的首地址,所以通过s+i来移动指针,而*(s+i)来代表数组中的某个元素的值。

(3)*(p+i)//p是指针名,指针p已赋值为某个数组的首地址时,通过指针p+i来移动指针指向某个元素,那么*(p+i)就是某个数组元素的值。

(4)p[i]//指针p已赋值为某个数组的首地址,那么也可以以数组的表示形式来代表某个数组的某个元素。

函数之间对一维数组和数组元素的引用

1.数组元素作实参

当调用函数时,数组元素可以作为实参传给形参,每个数组元素实际上代表内存中的一个存储单元,故和普通变量一样,对应的形参必须是类型相同的变量。数组元素的值可以传送给该变量,在函数中只能对该变量进行操作,而不能直接引用对应的数组元素,更不可能在函数中改变对应数组元素中的值(即形参的改变不会影响实参的值)

2.数组名作实参

数组名可以作为实参传递,但数组名本身是一个地址值,因此,对应的形参就应当是一个指针变量,此指针变量的基类型必须与数组的类型一致。在函数中。可以通过此指针变量来引用调用函数中对应的数组元素,从而达到对调用函数中对应的数组元素进行操作而改变其中的值(即形参的改变也会影响实参的值)。

当数组名作为实参时,对应的形参除了是指针外,还可以用另外两种形式。

对应函数首部可以写成一下三种形式:

arrin(int *a)

arrin(int a[])

arrin(int a[N])

9.5 二维数组的定义和二维数组元素的引用

1.二维数组由若干个一维数组组成:在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每个元素优势一个一维数组;

int *p, a[3][4];

如以上定义的a数组,实际上可以看作长度为3的数组,可视a数组由a[0]、a[1]、a[2]三个元素组成,而a[0]、a[1]、a[2]中每个元素优势由四个整型元素组成的一维数组。可用a[0][0]、a[0][1]等来引用a[0]中的每个元素,其它一次类推。

二维数组的引用

形式:数组名[下标][下标]

下标是整型字符或字符型的常量,变量或表达式(定义时不能使用变量)】

如:a[1][2]     a[i][j]

数组元素如普通变量般可以出现在表达式中

如:a[1][2]=a[2][2]/2

使用数组元素时,应注意不要超出其定义的范围;

如: int a[2][3];   a[2][3]=5;

不能引用整个数组或数组的一行

如 int a[2][3]; a=5,a[0]=3这都是错误的

二维数组的初始化

分行初始化

按元素排列顺序初始化

注意:

int a[][]={{1,2},{3,4},{5,6}};错误,列下标能省略

int a[2][3]={}; int a[2][3]={{},{}};、{{0},{}}错误,不能是空列表

int a[2][3]={1};//不是把所有元素都初始化为1,而是第一个元素为1,其他的为默认为0

int a[2][3]={0};//才是把所有元素初始为零

 

posted on 2018-09-14 14:46  胖鸟先飞  阅读(163)  评论(0编辑  收藏  举报

导航