第九章 数组
引言:
C语言中简单数据类型:
int float double char int * int**
构造数据类型:数组
数组定义:把类型相同的若干个变量组合到一块,它们有一个的组名,具体表示每一个变量是用组名和该变量在组中排的位置组成。
程序中代码表示:int a[5];
a[0]a[1]…..a[4]
存储图:
a[0] a[1] a[2] a[3] a[4]
1111 1115 1119 1123 1127
1.一维数组的定义和一维数组元素的引用
(1)一维数组的定义
形式:类型名 数组名[整型常量表达式]
类型名:数组元素的类型
数组名: 合法的表示法
整型常量表达式:确定组的大小
int a,i=3;
int a[3]; int a[2+1];
flaot a[3];
double a[3];
char a[3];
int *a,*b,*c;
int *a[3];
int a[i]; 非法
int a[3.0];非法
(2)一维数组的引用
下标:确定每一个具体元素在组中的位置。下标从0开始且不可越界,下标的类型(整型常量、整型常量表达式、已经定义且赋值的整型变量)
形式:组名[下标];
举例:
int a[3],i=1,j=0;
a[0] a[1] a[2]
a[1+1]
a[i] a[i+j]
a[3] 非法
a[-1] 非法
a[1.5] 非法
总结:
int a[3],i=1;
数组名:a
元素及其元素的个数:3 a[0] a[1] a[2]
下标的下界和上界 0 1 2
存储图:
一维数组名:
一个数组元素实质就是一个变量,代表内存中的一个存储单元。一个数组代表了内存中一串连续的存储单元。
C语言中一维数组名中存放的是一串连续存储单元的首地址,它是一个地址常量。一维数组名可理解为一个指针,它的基类型为数组类型。不可以对它重新赋值,也不可以用数组名a代表a[0].a[1]…这些数组元素。 理解为指针
a[0] a[1] a[2] a[3] a[4]
1111 1115 1119 1123 1127
int a[5],k,*p=&k;
a[0] a[1] a[2]…a[4]
1115 …
10 20 30……
a:数组名,理解为指针
值:1111 &a[0] a 常量
a=p; a++; 非法
p=a;
基类型: int
(3)一维数组的初始化(赋值)
int a=1;
int a[3]={1,2}; 0
char a[3]={‘0’,’1’ }; ‘\0’
int a[]={0 ,0,0}; 3
(4)一维数组编程
例:求所有元素的平均值
#include "stdio.h"
main()
{int a[6]={72,98,87,64,57,77};
int sum=0,i;doble ave;
for(i=0;i<6;i++)
sum=sum+a[i]/6;
printf(“%lf”,sum);
}
2.一维数组和指针
a[0] a[1] a[2] a[3] a[4]
1111 1115 1119 1123 1127
(1)一维数组和数组元素的地址
数组名代表了一串连续存储单元的首地址(数组中第0个元素的地址)这个地址值是固定的,即数组名为一个地址常量不可以对它重新赋值。
a可理解为指针,它的基类型为数组的类型。
&a[0] 1111
一串连续存储单元的首地址 1111
a里边的内容 1111
a的基类型 int
int a[3],x=10,*p=&k,k;
a=&x; 非法
a++; 非法
a=p; 非法
p=a; p=&a[0]
语句举例:
int a[3],*p,i;
1)数组名a 的形式:
使p依次指向数组中的每一个元素
p=&a[0] a a+0 1111
p=&a[1] a+1 1111+1*4 1115
p=&a[2] a+2 1111+2*4 1119
for(i=0;i<3;i++)
p=a+i;
从键盘输入数据依次存放到a数组中
for( i=0;i<3;i++)
scanf(“%d”,&a[i]);