C语言基础知识学习(数组)

来源:互联网 发布:德州力拓软件 编辑:程序博客网 时间:2024/05/20 23:33

C语言基础知识学习之数组

首先,数组是同种类型元素的集合。

一、一维数组

1.一维数组定义

int a[10];

这样我们便定义了一个数组a,它分配10int类型空间。

 

2.数组的初始化

我们可以在定义一个数组的同时对它进行初始化操作,例如:

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 

我们可以只对数组的部分元素进行初始化操作,例如:

int a[10] = {1, 2, 3, 4, 5};

这里我们只对数组的前5个元素做了初始化操作,剩下其它元素的值是未知的。

 

如果我们对数组的所有元素都进行了初始化操作,那么我们甚至可以省略数组长度不写,编译器可以根据初始化数组元素的个数自动计算出数组的长度,但是写上总是好的,这样也便于其他人阅读和维护。

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 

3. 数组元素的访问

访问数组中的元素可以采用数组名加下标的方式,下标是从0开始,c并不检查数组下标是否越界,所以在访问数组中的元素时需要注意,需要对数组下标做判断,防止访问数组越界。

int a[10];

int i;

 

for (i = 0; i < 10; i++)

 {

    a[i] = i + 1;

}

 

二、二维数组

1.二维数组定义

int a[6][10];

这样我们便定义了一个二维数组,这个数组是一个包含60个元素的矩阵,有610列。如何去看待一个二维数组,可以这样去看,先将a看成一个一维的数组,它有6个元素,但是它的每个元素又是一个包含10个元素的数组。

2.二维数组的初始化

同一维数组一样,可以对数组的所有元素进行初始化同样也可以只对数组的部分元素进行初始化。

3. 数组元素的访问

还是数组名加下标的方式,不过下标有两个下标,一个是行下标,另一个是列下标,其它同一维数组没有什么两样。

下面是我对于二维数组程序的一些实践:

例一:二维数组中各个表现形式的含义

#include<stdio.h>#include<string.h>int main(){int a[3][3] ={{1,2,3},              {4,5,6},              {7,8,9}};printf("%0x  %0x  %0x\n",a,a+1,a+2);  //a+i 访问某(下)一行的地址 printf("%0x  %0x  %0x\n",a[0],a[1],a[2]);printf("%0x  %0x  %0x\n",a[0]+0,a[0]+1,a[0]+2); //第几行的第几列 printf("%d  %d  %d\n",*(a[0]+0),*(a[0]+1),*(a[0]+2));//取出第一行的三个数字中的内容return 0; }

终端显示结果:

61fedc  61fee8  61fef4
61fedc  61fee8  61fef4
61fedc  61fee0  61fee4
1  2  3

Process exited normally.
Press any key to continue . . .

分析:由上述程序可知,在二维数组中打印出a和a[0]的效果相同,都相当于访问数组第一行的地址;而a[i]+i则相当于访问第几行第几列的元数地址;*(a[i]+i)相当于取出第几行第几列的元数的内容


例二:在二维数组中取出数组各个元数的三种表示方法

#include<stdio.h>int main(){int a[3][3] = {{1,2,3},                {4,5,6},                {7,8,9},          };int i,j;          for(i = 0;i < 3;i++){    for(j = 0;j < 3;j++)     //取出数组各个元数的三种表示方法     {//printf("%d\t",*(*(a+i)+j));//printf("%d\t",*(a[i]+j));printf("%d\t",a[i][j]);  }printf("\n");    }        return 0;}

终端显示结果:

1       2       3
4       5       6
7       8       9

Process exited normally.
Press any key to continue . . .

分析:由此上述程序可知,在二维数组中引用某个数组的方式共有三种:1.printf("%d\t",*(*(a+i)+j)); 2.printf("%d\t",*(a[i]+j));

3.printf("%d\t",a[i][j]);