A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近赶进度没有时间写帖子,今天终于抽出时间来写这个帖子,这也是我欠大家的。
对于对于单单的数组  和 单单的指针相信大家应该都不会晕,但是两者结合起来就会让一大批刚刚学习的人蒙圈掉,归根结底就是有一些东西模糊不清,有很多写法到底有什么区别,下面我简简单单的谈一下我的理解:

1、数组
大家应该应该都不陌生,数组在内存中的表现就是一块连续的内存,每个元素存储的都是一样的数据类型,无论是基本的数据类型还是自定义的结构体类型。但是特点就是存储相同的结构。基本概念我在这里就不赘述了,相信大家都已经烂熟于心了。我主要说的就是大家比较迷惑的地方:
数组的名字,大家都知道是数组的第一个元素的地址,也称数组的首地址,根据这句话我们就可以得出结论:
int array[5];
他的array 和 &array[0] 是完全等价的。都是表示的数组的首地址。

数组元素的访问我们都是通过数组的下标进行访问的,那么我们就需要深入的去理解一下程序运行的时候,是怎么通过下标进行数组的访问的:
访问操作的就是在数组首地址array的地址向后移动  所存储数据类型 乘以 元素的个数。
以上面的例子举例:比如我们通过array[3]来取数组array的第四个元素,其实在内存中的操作就是在数组的首地址array的基础上向后移动数组所存元素所占字节(例子中是int这里是4)个字节 乘上 所取的个数(这里就是3),也就是在array的基础上向后移动4 * 3 = 12个字节,然后再取出后面4个字节的内容就是array[4]了。

从上面的理解了之后,就可以得出如下结论:
array[3] 和 *(array + 3) 和 [3]array 都是一个意思,也都是合法的,都是取出数组array的第四个元素。
我感觉上面的讲解,如果大家都明白了的话,应该就能解决单独的数组方面的问题了。如果没明白或者还有其他问题的话可以留言,我会为大家解答。

2、指针
指针就是一个内存地址,更多的理解可以理解成某个变量的地址。我们使用指针,就是来做内存的访问,二维数组这个帖子中我不进行讲解,如果需要我单开一个帖子,这里我主要讲讲指针和数组结合起来的使用。其实上面的话,根据我的理解就在看这里就很容易理解了:
int array[5];
int *arrayPtr = array;//arrayPtr = &array[0]是一样的
这里面用arrayPtr指向了数组的首地址,这样我们就可以用指针来进行数组的访问,如果只是进行数组的访问,其实和使用数组名是一样的(数组名就是指针):
比如我们还是取第4个元素,下面几种写法都是一样的:
arrayPtr[3];
*(arrayPtr + 3);
3[arrayPtr];

就因为数组名就是数组的首地址,所以使用指针和使用数组名字来取某个元素其实是一样的。但是也是有区别的:
数组名array是一个常亮,这个array是不能改变的,比如array ++;array += 1;array = array + 5等一切数组名在赋值运算符左边的操作都是不合法的,编译器是不会通过的。
相反指针arrayPtr是一个变量,他是可以放在赋值运算符的左边的,比如进行arrayPtr++; arrayPtr +=3等等都是完全合理的。

其实我要说的到这里就都差不多了,相信这个帖子能消除大部分的心理模糊心理啦,遇到这种问题就是需要多联系就知道啦,如果有什么问题欢迎大家多多的指正,大家相互交流,才能前进的更快。

52 个回复

正序浏览
牛逼......
回复 使用道具 举报
MrK 初级黑马 2015-11-25 00:16:09
51#
路过帮顶。。。。。。。。。。。。。。。。
回复 使用道具 举报
Mr.Yan 中级黑马 2015-11-24 23:37:42
50#
今天考试,都晕了。。。
回复 使用道具 举报
  谢谢你, 看了你的 我感觉 懂了那么一点点   
回复 使用道具 举报
夜神月No1 发表于 2015-11-24 07:41
其实我和你一样,也是用一样的字体,我自己看了一下都没兴趣看了

好吧,看来是经验之谈呀、、、、我刚才看了一下,确实不太好
回复 使用道具 举报
正在输入中... 发表于 2015-11-23 23:42
好吧、、接受你的建议、、以后写帖子 好好排版。。。

其实我和你一样,也是用一样的字体,我自己看了一下都没兴趣看了
回复 使用道具 举报
夜神月No1 发表于 2015-11-23 13:05
感觉还是需要有重点,感觉写的都是一样的字体,让看的人都没有兴趣去看了 ...

好吧、、接受你的建议、、以后写帖子 好好排版。。。
回复 使用道具 举报
楼主幸苦了
回复 使用道具 举报
正在输入中... 发表于 2015-11-14 01:24
自己再顶一贴,睡觉,大家多多交流,一起奔向高新。。。。

感觉还是需要有重点,感觉写的都是一样的字体,让看的人都没有兴趣去看了
回复 使用道具 举报
看到指针就头疼。。。。
回复 使用道具 举报

要记得看呀。。。。只有看懂了 才是自己的。。。。。
回复 使用道具 举报
Mr.Yan 中级黑马 2015-11-21 23:25:09
41#
数组指针和指针数组确实有点绕,表示看了好久...
回复 使用道具 举报
正在输入中... 发表于 2015-11-19 23:51
恩恩,学习方法不错、、每天的知识一定要掌握,等有时间的时候再去拓展。。。加油 ...

一起加油 一起加油
回复 使用道具 举报

我还有其他的帖子,可以去看看。。。。应该也挺不错的
回复 使用道具 举报

666666。。。。。。。。。。
回复 使用道具 举报
嘿,今天也学了指针和数组,因为有基础所以理解起来还好,就是放一块比较的时候有点晕。楼主还没往深了说,明儿我也是试试发个贴说指针,把晕的地方彻底弄清楚。
回复 使用道具 举报
骑白马的唐僧 发表于 2015-11-19 13:17
是那时候没时间啊。。每天学习太紧张,指针已经过去了,先把当天的稳固下 ...

恩恩,学习方法不错、、每天的知识一定要掌握,等有时间的时候再去拓展。。。加油
回复 使用道具 举报
正在输入中... 发表于 2015-11-18 23:24
是因为写的太长了没时间看?还是说没学习到这里呢?

是那时候没时间啊。。每天学习太紧张,指针已经过去了,先把当天的稳固下
回复 使用道具 举报
姚春林 来自手机 中级黑马 2015-11-19 01:07:56
34#
66666666!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马