【C语言】一维数组、二维数组与指针

一维数组和指针:
1、一维数组名:
对于这样的一维数组:int a[4];  a作为数组名就是我们数组的首地址, a是一个地址常量
首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  
而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果.
2、一维数组空间:
变量被声明后, 我们操作编译器, 对我们的C源文件进行编译, C在编译的时候 就会给我们的变量开辟相应的空间, 而对于数组而言, 开辟的空间是连续的.   我们把每个空间叫做存储单元, 每个空间都是有自己的编号, 就像我们现实生活中每户人家都有自己的一个门牌号一样, 系统数组空间地址是相连的, 并且我们的数组名就是一维数组首地址, 是一个地址常量. 
3、指针:
既然数组的是占用连续的存储单元, 并且数组的首地址就是数组名, 我们可以通过指针变量来取出相应的地址. 
指针变量, 就是这个箱子是专门存放其他箱子地址的. 我们可以把数组首地址给我们的指针变量. int a[4],*p; p=a;

以一维数组int a[4] 分析其与指针的关系如图1所示

                                                                 

                                                                             图1 一维数组int a[4] 与指针关系

 二维数组和指针:

通过刚才对一维数组与指针的关系介绍,我们接下来探讨一下二维数组与指针的关系

一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的(即行主序),当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组。

以二维数组brr[3][4]为例进行分析与指针的关系如图2所示:

                   

                                                                            图2 二维数组brr[3][4]与指针的关系

brr[0][4]属于越界状态,事实上在上述例子中brr[0][4]和brr[1][0]是一样的,我们可以通过访问他们的内存地址判断是否一样。

int (*p)[4]是一个指向长度为4的整形数组的指针(数组指针

int *p[4]是一个保存指针的数组(指针数组

猜你喜欢

转载自blog.csdn.net/Jacky_Feng/article/details/83592920