我正在尝试弄清楚“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;
}
}
最佳答案
a+n-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 )
但是它有助于理解原始函数中使用的表达式。
请注意,如果 n 等于 0,则由于表达式 a + n - 1
,原始函数不正确。
关于c - 仅使用指针对整数数组进行排序时的 "for"循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738612/