我试图找出" for"循环在一个函数中工作,该函数仅使用指针对整数数组进行排序,而不使用索引。以下函数完成了该任务,但我不明白在语句中比较了什么值" aptr1< a + n - 1。"我理解这个语句用于滚动数组,并且a + n-1等价于&(a [n-1]),它指向数组中的特定值,但是如何比较数组中包含的值完成按索引方式滚动数组的任务?谢谢你的帮助!
btw-在函数参数中* a指向未排序的整数数组,n表示数组中的整数数。
void sort (int *a, int n)
{
int *aptr1, *aptr2, temp;
for ( aptr1 = a; aptr1 < a + n - 1; ++aptr1 )
for ( aptr2 = aptr1 + 1; aptr2 < a + n; ++aptr2 )
if ( *aptr1 > *aptr2 ) {
temp = *aptr1;
*aptr1 = *aptr2;
*aptr2 = temp;
}
}
答案 0 :(得分:1)
(*a+n-1)
不等同于&a[n-1]
。它相当于for ( aptr1 = &a[0]; aptr1 < &a[n - 1]; ++aptr1 )
for ( aptr2 = &aptr1[1]; aptr2 < &a[n]; ++aptr2 )
if ( *aptr1 > *aptr2 ) {
temp = *aptr1;
*aptr1 = *aptr2;
*aptr2 = temp;
}
要理解循环,只需按以下方式重写它们
( a + n )
虽然代码不正确,因为您可能不会取消引用表达式a + n - 1
,但它有助于理解原始函数中使用的表达式。
考虑到如果n等于0,那么由于表达式{{1}},原始函数不正确。