lizhiyong_11 发表于 2017-8-15 16:09:06

C语言指针课后作业,不懂的地方,我来请教一下

p+1是指向整个数组最后的位置,那么*(p+1)应该是取值的意思,继而往下思考,*(p+1)-6应该是整个数组最后位置的值减去6,   这与小甲鱼老师的解释想矛盾,所以就更不能理解在取得该位置的值后,怎么又有一个取值符号,像这样*(*(p+1)-6)

丶忘却的年少o 发表于 2017-8-15 16:53:22

本帖最后由 丶忘却的年少o 于 2017-8-15 17:02 编辑

打个比方,首先p = &array,就是把整个数组当成一个整体看待,比方打包变成一个包袱,p+1就是第二个包袱
*(p+1) 相当于第二个包袱地址,(因为数组名也可以有数组第一个元素的地址这一说)那*(p+1)-6就是第一个包袱里下标4的地址,那么值是什么那,就要重新解引用一次*(*(p+1)-6) = 4
不知道我这么说你能明白吗?{:10_245:}

lizhiyong_11 发表于 2017-8-15 17:13:08

丶忘却的年少o 发表于 2017-8-15 16:53
打个比方,首先p = &array,就是把整个数组当成一个整体看待,比方打包变成一个包袱,p+1就是第二个包袱
* ...

你的思路我基本上都懂了,但是有一个地方我没有懂,*(p+1)为什么相当于第二个包袱的地址,*号不是取值的意思吗?取址符不是&吗?

丶忘却的年少o 发表于 2017-8-15 17:17:04

lizhiyong_11 发表于 2017-8-15 17:13
你的思路我基本上都懂了,但是有一个地方我没有懂,*(p+1)为什么相当于第二个包袱的地址,*号不是取值 ...

既然你懂了,那解释就容易了,就是打开,打开了第二个包袱,然后打开后的地址是什么那,我括号里说了,是第二个包袱第一个元素的地址,然后-6因为数不够就跑去了第一个包袱,就到了那个下标4的地址了。
如果懂了没问题了记得点“最佳答案”哦{:10_340:}

lizhiyong_11 发表于 2017-8-15 17:30:05

丶忘却的年少o 发表于 2017-8-15 17:17
既然你懂了,那解释就容易了,就是打开,打开了第二个包袱,然后打开后的地址是什么那,我括号里说了,是 ...

已经给你设置最佳答案了,不过我还是想追问一下哈,希望你不要介意,*(p+1)明明是取值的意思,怎么就变成了地址了呢?这个问题可以解释一下吗?

丶忘却的年少o 发表于 2017-8-15 17:42:33

lizhiyong_11 发表于 2017-8-15 17:30
已经给你设置最佳答案了,不过我还是想追问一下哈,希望你不要介意,*(p+1)明明是取值的意思,怎么就变 ...

没关系,本来就是来给你解答的嘛。
我再换个说法,这么说吧,array10个元素看成一个整体的地址,p+1就是第二个10个元素看成一个整体的地址。那我把这两个地址看成一个数组比如a={前10个,后10个},那我p加不加1就是在a这个数组里面选择要前10个还是后10个的地址。假设我选了p+1,*(p+1)就变成了第二个10个元素的地址的首地址,*(p+1)-6就是第一个10个里的下标4地址,那我有了地址我要值,就只能再取一次*(*(p+1)-6)
这个应该比上一个解释要好。你要是还是不懂就再问,别客气{:10_288:}
页: [1]
查看完整版本: C语言指针课后作业,不懂的地方,我来请教一下