一维数组的定义、初始化和使用
定义一个一维数组的格式如下:类型 数组名[数组大小];
数组的下标范围总是从0开始(因此下标最大为数组大小减一)。下面一行语句定义了一个大小为10的长整型数组:long value[10];
这相当于下面的Pascal语句:var value:array[0..9]of longint;
C语言的数组范围左端点不能自定义,它的数组下标只能从0开始。
下面几种方式可以在定义数组的同时进行初始化:long value[10] = { 0, 8, 2, 0, 3 } ;
long value[10] = { [1]=8, [2]=2, [4]=3 } ;
上面两个语句是等价的。其中前一种方法依次对数组的前5个数进行初始赋值,后一种方法仅对数组的其中三个位置进行初始化。初始化中没有涉及到的下标所对应的数值自动被设为0。
C语言允许数组的大小为一个变量,但这样的数组在定义时不能像上面一样进行初始化。
这种初始化方法只在定义数组时用,不能用于程序中的赋值。数组之间也不能直接赋值,你不能把数组a整个赋值给数组b。
程序中使用数组的方法和Pascal一样。下面的程序将输出1000以内的素数:#include <stdio.h>
#include <stdbool.h>
int main()
{
bool isPrime[1000];
int i,j;
for(i=2;i<1000;i=i+1)
isPrime[i]=true;
for(i=2;i<1000;i=i+1)
{
if (isPrime[i])
{
printf("%d ",i);
for(j=2*i;j<1000;j=j+i)
isPrime[j]=false;
}
}
return 0;
}
当一维数组作为函数参数时,数组大小可以不写,以适应不同长度的数组。通常你还需要另一个参数告诉函数你的数组有多大。下面这个函数返回数组中的最大值:long maxValue ( long length, long array[] )
{
long i, max = 0;
for ( i=0; i<length; i=i+1)
if (array[i]>max) max = array[i];
return max;
}
下面的代码合法地调用了上面的函数。long a[5] = { 1, 5, 7, 3, 4 };
printf( "%d" , maxValue( 5,a ) );
C语言中的字符串
C语言也使用字符数组作为字符串。定义一个char a[20],就相当于定义了一个长度不超过20的字符串。Pascal中使用a[0]记录字符串的长度,字符串内容从a[1]开始;但C语言并不直接记录字符串长度,a[0]表示字符串的第一个字符,最后以ASCII码0(或写成字符'