1、数组基本概念
和结构体类似,数组( Array) 也是一种复合数据类型,它由一系列相同类型的元素( Element) 组成。数组元素的存储空间是相邻的,数组中的元素可以是基本数据类型,也可以是组合数据类型,但是只有一种。
定义和访问一个数组,如下:
#include <stdio.h>
int main(void)
{
int count[4] = { 3, 2, }, i;
for (i = 0; i < 4; i++){
printf("count[%d]=%d\n", i, count[i]);
}
return 0;
}
这个例子通过循环把数组中的每个元素依次访问一遍,在计算机术语中称为遍历。数组与结构体有许多相似的地方,但是要注意一点:数组不能互相赋值。比如a数组的值不能直接使用“=”赋值给b数组。
同时数组也不能直接作为一个函数的参数或者返回值,这里要注意,它会自动转换为指针数据类型。指针稍后再说。
2、数组简单应用
生成并打印随机数
#include <stdio.h>
#include <stdlib.h>
#define N 20
int a[N];
void gen_random(int upper_bound)
{
int i;
for (i = 0; i < N; i++)
a[i] = rand() % upper_bound;
}
void print_random()
{
int i;
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
}
int main(void)
{
gen_random(10);
print_random();
return 0;
}
3、字符串
事实上,字符串也可以看做是一个比较特殊的数组,不过它存储的是字符这样的数据,它当中的基本类型是char字符。不过这个特殊的字符数组,最后是使用'\0'表示字符串结束的。
我们可以定义一个字符数组如下:
char str[] = "Hello, world.\n";
然后使用输出语句打印出来:
printf("string: %s\n", str);
4、多维数组
就像结构体可以嵌套一样,数组也可以嵌套,一个数组的元素可以是另外一个数组,这样就构成了多维数组。例如定义并初始化一个二维数组:
int a[3][2] = { 1, 2, 3, 4, 5 };
数组a有3个元素, a[0]、 a[1]、 a[2]。每个元素也是一个数组,例如a[0]是一个数组,它有两个元素a[0][0]、 a[0][1],这两个元素的类型是int,值分别是1、 2,同理,数组a[1]的两个元素是3、 4,数组a[2]的两个元素是5、 0。
#include <stdio.h>
void print_day(int day)
{
char days[8][10] = { "", "Monday", "Tuesday",
"Wednesday", "Thursday",
"Friday",
"Saturday", "Sunday" };
if (day < 1 || day > 7){
printf("Illegal day number!\n");
}
printf("%s\n", days[day]);
}
int main(void)
{
print_day(2);
return 0;
}