我正在尝试使用指针而不是索引对指针数组进行排序,但我不完全确定如何执行此操作。我一直在谷歌搜索,但没有找到任何相关的东西。
我已经使用索引完成了排序工作,但我也希望通过使用指针来实现。目前该功能如下所示:
void sort(int *pointer, int size){
int i, j, temp;
for(i = 0; i < size; i++){
for(j = i + 1; j < size; j++){
if(pointer[j] < pointer[i]){
temp = pointer[j];
pointer[j] = pointer[i];
pointer[i] = temp;
}
}
}
}
如您所见,正在使用数组索引,如何仅使用指针?
答案 0 :(得分:7)
这会很烦人。您需要使用C中的事实a[i] == *(a + i)
,因此:
if(pointer[j] < pointer[j])
会变成
if(*(pointer + j) < *(pointer + j))
等等。除了索引代码更容易阅读之外,没有什么区别。 :)
答案 1 :(得分:4)
您可以使用指针替换索引:
void sort(int *pointer, int size){
int *i, *j, temp;
for(i = pointer; i < pointer + size; i++){
for(j = i + 1; j < pointer + size; j++){
if(*j < *i){
temp = *j;
*j = *i;
*i = temp;
}
}
}
}
理论上,这应该比每次需要访问元素时添加索引更快。实际上,大多数编译器都会优化你的原始循环以便以这种方式使用指针。
答案 2 :(得分:2)
方括号([]
)实际上只是一个“添加和取消引用”运算符。因此,要转换代码,请将something[x]
替换为*(something+x)
void sort(int *pointer, int size){
int i, j, temp;
for(i = 0; i < size; i++){
for(j = i + 1; j < size; j++){
if(*(pointer+j) < *(pointer+i)){
temp = *(pointer+j);
*(pointer+j) = *(pointer+i);
*(pointer+i) = temp;
}
}
}
}