C语言书上例题看不懂,能帮忙看一下吗?
我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)
这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度
那么我们知道:如果传递的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这个指针指向数组中间的元素。