[DSP编程]

二维数组

[复制链接]
451|0
手机看帖
扫描二维码
随时随地手机跟帖
蒋博1026|  楼主 | 2019-10-30 21:21 | 显示全部楼层 |阅读模式
二维数组

1、二维数组的内存映像

(1)一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的,由多个内存单元组成。

(2)从内存角度来看,一维数组和二维数组没有本质差别。

(3)二维数组int a[2][5]和一维数组int b[10]其实没有本质差别。我们可以把两者的同一单元的对应关系写下来。

a[0][0]    a[0][1]    a[0][4]     a[1][1]     a[1][4]

b[0]       b[1]       b[5]        b[6]        b[9]

(4)既然二维数组都可以用一维数组来表示,那么二维数组存在的意义和价值在哪里?

二维数组和一维数组在内存使用效率、访问效率上是完全一样的。在某种情况下使用二维数组而不使用一维数组的原因在

于二维数组好理解、代码好写、利于组织。

(5)总结:我们使用二维数组(C语言也提供二维数组),并不是必须,而是一种简化编程的方式。其实一维数组的出现

其实也不是必然的,也是为了简化编程。

2、哪个是第一维,哪个是第二维?

(1)二维数组int a[2][5]中,2是第一维,5是第二维。

(2)结合内存映像来理解二维数组的的第一维和第二维的意义。首先第一维是最外边一层的数组,所以int [2][5]这个数

组有两个元素;其中每一个元素又是一个含有5个元素的数组(这个数组是第二维)。

(3)总结:二维数组的第一维是最外部的那一层,第一维本身是个数组,这个数组存储的元素也是一个数组;二维数组的

第二维是里边的那一层,第二维本身是个数组,这个数组中存的元素是普通元素,第二维这个数组本身作为元素存储在第一

维的数组中。

3、二维数组的下标式访问和指针式访问

(1)一维数组的两种访问方式:以int b[10]为例,int *p = b;

b[0]等同于*(p + 0);   b[9]等同于*(p + 9);   b等同于*(p + i);

(2)二维数组的两种访问方式:以int [2][5]为例,(合适类型的)p = a;

a[0][0]等同于*(*(p + 0) + 0);   a[j]等同于*(*(p + i) + j);

4、二维数组的定义方式

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

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

int *p = a;//编译器会报错的,因为类型不匹配

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1827

帖子

18

粉丝