C 语言 数组
数组 是用来存储一系列数据,但它往往被认为是一系列相同类型的变量,也就是说,数组 是可以存储一个固定大小的相同类型元素的顺序集合。
C 语言支持 数组 数据结构。
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。 数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。 最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组内存模型
声明数组
在 C 中要声明一个数组,需要指定元素的类型和元素的数量:
type arrayName [ arraySize ];
- 这种数组叫做一维数组。
- arraySize 必须是一个大于零的整数常量
- type 可以是任意有效的 C 数据类型。
范例
要声明一个为 int 类型的包含 10 个元素的数组 apple ,声明语句如下:
int apple[10];
现在 apple 是一个可用的数组,可以容纳 10 个类型为 int 的数字。
初始化数组
在 C 中,数组可以逐个初始化,也可以使用一个初始化语句
int [5] = {1, 2, 3, 4, 5};
大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
如果我们省略掉了数组的大小,数组的大小则为初始化时元素的个数。比如:
double balance[] = {1, 2, 3, 4, 5};
将创建一个数组,它与上面实例中所创建的数组是完全相同的。
下面这条语句则是为数组中某个元素赋值的示例:
balance[4] = 8;
这条语句把数组中第五个元素的值赋为 50.0。
所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。
以下是上面所讨论的数组的的图形表示:
访问数组元素
数组元素可以通过数组名称加 索引 进行访问。
元素的索引是放在方括号内,跟在数组名称的后边。
例如:
int the3 = apple[2];
上面的语句将把数组中第 3 个元素的值赋给 the3 变量。
下面的范例演示了上面我们所讲的三个概念:声明数组、数组赋值、访问数组
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> int main () { int apple[ 7 ]; /* n 是一个包含 7 个整数的数组 */ int i,j; /* 初始化数组元素 */ for ( i = 0; i < 7; i++ ) { apple[ i ] = i + 3; /* 设置元素 i 为 i + 3 */ } /* 输出数组中每个元素的值 */ for (j = 0; j < 7; j++ ) { printf("apple[%d] = %d\n", j, apple[j] ); } return 0; }
编译和运行上面的代码,输出结果如下:
$ gcc main.c && a.out apple[0] = 3 apple[1] = 4 apple[2] = 5 apple[3] = 6 apple[4] = 7 apple[5] = 8 apple[6] = 9
延伸阅读:C 语言中数组详解
在 C 中,数组是非常重要的一种数据结构,我们需要了解更多有关数组的细节。
下表示是 C 程序员必须清楚的一些与数组相关的重要概念
概念 | 描述 |
---|---|
多维数组 | C 语言支持多维数组。多维数组最简单的形式是二维数组 |
传递数组给函数 | 通过指定不带索引的数组名给函数来传递一个指向数组的指针 |
从函数返回数组 | C 允许从函数返回数组 |
指向数组的指针 | 通过指定不带索引的数组名来生成一个指向数组中第一个元素的指针 |