" for"使用ONLY指针排序整数数组时循环

时间:2017-10-13 22:05:05

标签: c arrays pointers

我试图找出" 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;  
       }  
}  

1 个答案:

答案 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}},原始函数不正确。