在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。
数组就是在内存中连续的相同类型的变量空间,而且数组属于构造数据类型。
按数组元素类型的不同
数组可分为:数值数组、字符数组、指针数组、结构数组等类别。
int a[10];
char b[10];
按照维数(数组元素下标的个数)的不同,可将数组分为一维数组、二维数组、三维数组、四维数组等。
通常,将二维及以上的数组称为多维数组。
数组的组成
数据类型 数组名 [数组元素个数]
a[3]表示含有a[0],a[1],a[2]这三个。
但是数组不支持动态数组,所以数组要指明元素长度。
比如:scanf("%d",&arr[i])
在定义数组的同时进行赋值,称为初始化。全局数组若不初始化,编译器将其初始化为零。
局部数组若不初始化,内容为随机值。
int a[10] = { 1, 2, 3 };//初始化前三个成员,后面所有元素都设置为0
数组名是一个地址的常量,代表数组中首元素的地址。
printf("a = %p\n", a);
printf("&a[0] = %p\n", &a[0]);
这两个打印出来是同个东西。
数组的经典应用:冒泡排序
void Button(int arr[],int len)
{
int i,temp,j;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)//降序 如果将<改为>则就说升序
{
if(arr[j]<arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
函数名还可以改为:void Button(int *arr,int len)可以退化成为指针类型。
二维数组:
int arr[4][3];// 4是行 3是列
每一行相加:
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
sum+=arr[i][j];
printf("%d\n",sum);
}
sum=0;//清零操作,不影响下次操作
}
每一列相加:
for(j=0;j<3;j++)
{
for(i=0;i<4;i++)
{
sum+=arr[i][j];
}
sum=0;
}