
C指针之二维数组
发布日期:2021-05-07 15:11:54
浏览次数:20
分类:精选文章
本文共 1413 字,大约阅读时间需要 4 分钟。
二维数组
二维数组的内存映像
- 一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的多个内存单元组成的。
- 从内存角度来看,一维数组和二维数组没有本质差别。
- 二维数组int a[2][5]和一维数组int b[10]其实没有任何本质差别。我们可以把两者的同一单元的对应关系写下来。
- a[0][0] a[0][1] a[0][4] a[1][0] a[1][1] a[1][4]
- b[0] b[1] b[4] b[5] b[6] b[9]
- 既然二维数组都可以用一维数组来表示,那二维数组存在的意义和价值在哪里?
- 二维数组a和一维数组b在内存使用效率、访问效率上是完全一样的(或者说差异是忽略不计的)。
- 在某种情况下用二维数组而不用一维数组,原因在于二维数组好理解、代码好写、利于组织。
- 总结:
- 我们使用二维数组(C语言提供二维数组),并不是必须,而是一种简化编程的方式。想一下,一维数组的出现其实也不是必然的,也是为了简化编程。
二维数组的应用和更多维数组
- 最简单情况,有10个学生成绩要统计;如果这10个学生没有差别的一组,就用b[10];如果这10个学生天然就分为2组,每组5个,就适合用int a[2][5]来管理。
- 最常用情况:一维数组用来表示直线,二维数组用来描述平面。数学上,用平面直角坐标系来比拟二维数组就很好理解了。
- 三维数组和三维坐标系来比拟理解。三维数组其实就是立体空间。
- 四维数组也是可以存在的,但是数学上有意义,现在空间中没有对应(因为人类生存的宇宙是三维的)。
- 总结:
- 一般常用最多就到二维数组,三维数组除了做一些特殊与数学运算有关的之外基本用不到。(四轴飞行器中运算飞行器角度、姿态时就要用到三维数组)
哪个是第一维哪个是第二维?
- 二维数组int a[2][5]中,2是第一维,5是第二维。
- 结合内存映像来理解二维数组的第一维和第二维的意义。
- 首先第一维是最外面一层的数组,所以int a[2][5]这个数组有2个元素;其中每一个元素又是一个含有5个元素的一维数组(这个数组就是第二维)。
- 总结:
- 二维数组的第一维是最外部的那一层,第一维本身是个数组,这个数组中存储的元素也是个一维数组;
- 二维数组的第二维是里面的那一层,第二维本身是个一维数组,数组中存的元素是普通元素,第二维这个一维数组本身作为元素存储在第一维的二维数组中。
二维数组的下标式访问和指针式访问
- 一维数组的两种访问方式。以int b[10]为例, int *p = b;。
- b[0] 等同于 *(p+0);
- b[9] 等同于 *(p+9);
- b[i] 等同于 *(p+i)
- 二维数组的两种访问方式:以int a[2][5]为例,(合适类型的)p = a;
- a[0][0]等同于*(*(p+0)+0);
- a[i][j]等同于 *(*(p+i)+j)
int main(void){ 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; // 类型不匹配 printf("a[1][3] = %d.\n", a[1][3]); printf("a[1][3] = %d.\n", *(*(a+1)+3)); return 0;}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月13日 06时22分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
《小王子》里一些后知后觉的道理
2021-05-09
《自私的基因》总结
2021-05-09
《山海经》总结
2021-05-09
《非暴力沟通》总结
2021-05-09
《你当像鸟飞往你的山》总结
2021-05-09
《我是猫》总结
2021-05-09
《抗糖化书》总结
2021-05-09
apache虚拟主机配置
2021-05-09
光盘作为yum源
2021-05-09
PHP 正则表达式资料
2021-05-09
PHP官方网站及PHP手册
2021-05-09
mcrypt加密以及解密过程
2021-05-09
mysql连续聚合
2021-05-09
go等待N个线程完成操作总结
2021-05-09
消息队列 RocketMQ 并发量十万级
2021-05-09
ReactJs入门教程-精华版
2021-05-09
乐观锁悲观锁应用
2021-05-09
简单说说TCP三次握手、四次挥手机制
2021-05-09
.net Core 使用IHttpClientFactory请求
2021-05-09