C语言书上例题看不懂,能帮忙看一下吗?

谭浩强第五版P238m=(n-1)/2;j=n-1-i;i=x;j=x+n-1;p=x+m;自学的看不懂... 谭浩强第五版P238m=(n-1)/2;j=n-1-i;i=x; j=x+n-1; p=x+m;自学的看不懂 展开
 我来答
百度网友63b0960
2020-04-03 · TA获得超过1468个赞
知道小有建树答主
回答量:661
采纳率:90%
帮助的人:209万
展开全部

我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)


这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度

那么我们知道:如果传递的n是10,数组长度是10的话,它的元素的索引应该是0-9,也就是最大索引是9,n-1所表示的就是索引最大值。

目标是返顺序存放,那么也就意味着应该将第一个元素(索引是0)与最后一个元敏李素(索引是9)进行互换,将第二个元素(索引是1)和倒数第二个元素(索引是8)进行互换......以此类推,直到中间位置也就是索引是4和5进行交换的时候。这个时候的话,4这个截止条件与n的关系是什么呢?4=(n-1)/2,这里不是数学,因为n是整型变量,所以等号右边出来的只会是整数部分。这就是m=(n-1)/2的来源了,也就是设定交换的最后一个元素的索引号。这里你可以拿奇数个元素去试试,也是同样成立的。

根据交换过程,那么也就相应的有了:

i=0时,j=9=10-1-0

i=1时,j=8=10-1-1

...

也就是j=n-1-i这个式子的由来。


知道了左边,其实右边和左边是对应的,只不过左边用的数组的方式,右边使用的指针的方式。

注意右边的i,j声明的是整型的指针,也就是他只能指向一个整型的变量。题目中输入*x就是相当于给定数组头部桥耐迟的位置索引,所以i=x就是相当于让i这个指针指向数组第一个元素。数组就是一系列整型数字连续顺序存储的结果,所亩旦以i+1表示的就是i这个元素的下一个元素,也就是数组的第二个元素,因此j=x+n-1表示i这个指针指向到数组第n个元素,也就是数组的末尾了,此时i,j和前面不一样的,是都不再表示数组的索引号,而是都是指向某个数组元素的指针了。

这里还声明了一个p指针,移动了m位,m和上一个定义没有区别,就是找到中间位置和开头位置相差多少个元素,于是p=x+m也就是让p这个指针指向数组中间的元素。

用电知识分享
2020-04-03 · TA获得超过1831个赞
知道小有建树答主
回答量:841
采纳率:69%
帮助的人:261万
展开全部
m = (n-1)/2; // 计算数组的一袜拍半对应下标,n-1 是x[n]的告耐羡最大下标
j = (n-1)-i; // 计算数组从尾标起的下标,与i对称,准备交换两个数组元素的值,实现倒叙亩此功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式