博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组是什么
阅读量:5234 次
发布时间:2019-06-14

本文共 1008 字,大约阅读时间需要 3 分钟。

数组在c的表现是一些连续地址的指针

int a[3]

这个a 是数组类型,但a也是个指针,是a[0]的指针,根据“一些连续地址的指针"规则

a[1] 自然是 a+1:指针地址的值+1

这就是数组,至于多维数组,他的指针仍然是连续的,只是可以[0][1]这样取而体现了不同。

那么这个a到底是什么呢 还是把他理解为指针变量 最清晰,这样在动态申请数组内存的时候对于变量就更好理解

数组a[0]的指针就是数组a的指针就是数组a。

malloc(sizeof(int*)*4)   申请4个int大的的内存(连续的)

(int*)malloc(sizeof(int*)*4) 转换为int指针 a[0]是* 指向int

int **a = (int**)malloc(sizeof(int*)*4) a[0]是*,指向*,*指向int

 

那么理解 “连续地址的指针”  再去理解链表与数组到底哪个快就更好理解了

如果顺序读取(按顺序读) 其实是没有区别的

链表是通过指针找到下一个指针,数组是能过指针0+n指到下一个

但不按顺序读取时,

链表一个一个读的逻辑,再与数组的指针+n计算指针地址逻辑比,明显数组的读取就快了。

同样,由于逻辑不同,链表也有删除的优点。

看起来 "按地址计算其他位置" 与 “指针指向下个位置” 是完全不同的逻辑,而且是完全无法相融合的逻辑。

甚至于细想想,这好像完全不是能一起比较的两种方案。一个硬件派,一个逻辑派。

 

指针数组与数组指针

int *p1[10]; 包含指针的数组

int (*p2)[10];  指向数组的指针

 

“[]”的优先级比“*”要高。

p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。

那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。

至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。

 

一个小技巧

(*p)[10] 

*p+1 == (*p)[1]

 

 

转载于:https://www.cnblogs.com/mattins/p/3337547.html

你可能感兴趣的文章
string.format大全
查看>>
软件开发基本知识
查看>>
less
查看>>
数据结构与算法(3)- C++ STL与java se中的vector
查看>>
php唯一数
查看>>
Android学习笔记(四十):Preference使用
查看>>
CentOS 6.5 下的截图方法
查看>>
139团队(大型研发团队,大型敏捷开发团队,大型团队结构,敏捷绩效管理)...
查看>>
如何面向用户价值编写敏捷开发用户故事
查看>>
敏捷外包工程系列之一:序言(敏捷外包工程,敏捷开发,CMMI,软件外包,政府项目,银行项目,电信项目)...
查看>>
PHP正则表达式
查看>>
Linux C程序设计大全之gdb学习
查看>>
centos7忘记登录密码修改
查看>>
P1578 奶牛浴场
查看>>
如何遮挡电影英汉字幕
查看>>
Python3 读、写Excel文件
查看>>
.net缩放CAD窗口
查看>>
js鼠标移入移出图片变大
查看>>
HTTP 错误 404.3由于扩展配置问题而无法提供您请求的页面
查看>>
第14章: 带参数的方法
查看>>