一,数组的大小
在对于数据的存储和使用来说,运用数组是很方便的。但是在运用的时候超过了数组的范围以后会导致程序运行崩溃。所以,知道数组的大小并且学会用程序计算就显得十分重要。
此时我们需要引用一个运算符”sizeof"
sizeof 是一个运算符, 给出某个类型或变量在内存中所占据的字节数。
#include <stdio.h>
int main()
{
int a[]={2,4,3,2,5,6,7,8,9,9,7,6,4};
{
int i;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a[0]));
}
return 0;
}
如上图所示,程序的运行结果用52/4=13;可以计算出一共有十三个数储存在数组里面。
由此可以运用在循环里面判断大小而不用担心溢出。
#include <stdio.h>
int main()
{
int a[]={2,4,3,2,5,6,7,8,9,9,7,6,4};
{
int i;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a[0]));
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
上图的操作后,可以随意对初始的a[ ]进行增加删改而不用更改下面的循环,也不用担心溢出。
特例:数组作为函数的参数的时候
此时必须用另一个参数来传入数据的大小
int main()
{
int a[]={2,4,3,2,5,6,7,8,9,9,7,6,4};
{
int i;
int x,loc;
scanf("%d",&x);
loc=(x,a,length);
if(loc!=-1)
{
printf("yes\n");
}
else
{
prinf("No\n");
}
}
return 0;
}
int search(int key,int a[,int length])
{
int ret =-1;
int i;
for(i=0;i<length;i++)
{
if(a[i]==key)
{
ret =1;
break;
}
}
return ret;
}
上图中的length就充当了这个传递数组大小的参数。
二,二维数组
a[5][3];可以理解为一个五行三列的矩阵。
二维数组的遍历
二维数组的遍历可以化为一维数组的遍历来写,相当于两个一维数组。
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=i*j;
}
}
二维数据初始化
int a[ ][5]=;这里面列数是必须给出的,行数可以由编译器来求。
三,二维数组的应用
1,将一个二维数组行和列元素互换,并存到另一个二维数组中
将a[2][3],转化为a[3][2].
#include <stdio.h>
int main()
{
int a[2][3]={1,2,3,4,5,6};
int i,j,b[3][2]={};
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d ",a[i][j]);
b[j][i]=a[i][j]; //将两个数组的行与列对换。
}
printf("\n");
}
for(j=0;j<3;j++)//重新输出新的行与列。
{
for(i=0;i<2;i++)
{
printf("%5d",b[j][i]);
}
printf("\n");
}
return 0;
}
输出结果
2,有一个3X4的矩阵,要求程序编写出其中值最大的那个元素的值,以及其所在的行号和列号。
#include <stdio.h>
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,12,13,14};
int i,j,max=a[0][0];
//printf("%d\n",max);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(max<a[i][j])
{
max=a[i][j];
}
}
}
printf("%d %d %d",max,i,j);
return 0;
}