数组是一个单一数据类型对象的集合,其中单个对象并没有被命名,但是我们可以通过它所在数组中的位置对它进行访问,这种访问形式被称作索引访问或下标访问。
一维数组
如下,声明了一个包含10个int对象的数组(整形数组),每个对象被称作是数组ia的一个元素,元素下标是0-9而不是1-10,共10个元素,因为没有初始化,所以每个元素默认都是0。只定义数组但是不初始化时,必须在[]中指定数组的大小。
int ia[10];
将ia的第1个元素赋值给val:
int val = ia[0];
将常量100赋值给ia的最后一个元素:
ia[9] = 100;
数组可以被显式地用一组数来初始化,这组数用逗号分开并放在大括号中,如下声明了一个包含10个字符对象的数组(字符数组),并显式的初始化了每个元素,显式初始化数组时可以不指定数组的大小,系统会根据初始化元素的数量来分配数组的大小:
char ca1[] = {'h', 'e', 'l', 'l', 'o'};
字符数组还可以如下初始化:
char ca2[] = "hello";
注意:以上两种定义初始化方法是有区别的,数组ca1的大小是5;数组ca2的大小是6,在元素'o'后面会默认添加'0',这是个字符串结束符。
要把一个数组拷贝到另一个中去 必须按顺序拷贝每个元素,例如:
int index;
int array_size = 7;
int ia1[] = { 0, 1, 2, 3, 4, 5, 6 };
int main()
{
int ia2[ array_size ];
for (index= 0; index< array_size; ++index)
ia2[ index] = ia1[ index];
return 0;
}
二维数组
我们也可以定义二维数组,每一维用一个方括号对来指定,第一维称为行,第二维称为列,例如下面定义了一个4行3列的二维数组:
int ia[ 4 ] [ 3 ];
可以进行如下初始化:
int ia[ 4 ][ 3 ] = {
{1, 2, 3},
{11, 12, 13},
{21, 22, 23},
{31, 32, 33},
}
用来表示行的花括号即被内嵌在里边的花括号是可选的,下面的初始化与前面的是等价的,只是有点不清楚:
int ia[4][3] = {1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33};
访问第1行第1个的元素:
int val = ia[0][0];
给第4行的最后一个元素赋值:
ia[3][2] = val;
下面的定义只初始化了每行的第一个元素,其余的元素被初始化为0,即ia[0][0] = 0,ia[1][0] = 3,ia[2][0] = 6,ia[3][0] = 9:
int ia[ 4 ][ 3 ] = { {0}, {3}, {6}, {9} };
如果省略了花括号,结果会完全不同,下面的定义:
int ia[ 4 ][ 3 ] = { 0, 3, 6, 9 };
初始化了第一行的3个元素和第二行的第一个元素,其余元素都被初始化为0。
以上是老韩关于Linux c基础数组的总结欢迎一起讨论,如有不足欢迎指点;对Linux c或者Linux驱动感兴趣的朋友可以收藏关注,我会持续更新的,谢谢支持!