我尝试编写一个使用指针对数组进行排序的函数。我的 p 指针指向 x 数组,但为什么要将 x 作为指针返回?
#include <stdio.h>
int sort(int x[], int n){
int *p,k;
p=x;
for(int i=0; i<n-1; i++){
for(int l=i+1; l<n; l++){
if(*(p+i)>*(p+l)){
k=*(p+i);
*(p+i)=*(p+l);
*(p+l)=k;
}
}
}
return *x;
}
int main(){
int n;
scanf("%d", &n);
int a[n];
for(int i=0; i<n; i++){
scanf("%d",&a[i]);
}
sort(a,n);
for(int i=0; i<n; i++){
printf("%d ",a[i]);
}
return 0;
}
答案 0 :(得分:3)
你的函数返回int
(值),而不是指针。您的实现(return *x;
)按值返回参数x[]
的第一个元素。
为什么我要将x作为指针返回?
应该表示什么是返回值?目前尚不清楚为什么你会在这种情况下返回任何东西。直到你能回答这个问题,void
会更好。
答案 1 :(得分:1)
为什么你“必须”返回一个指针的简短答案是你显然不必返回任何东西。您不返回指针(但是int
)并且您没有使用返回的值进行任何操作。您可以将函数的返回类型更改为void
,并使用return
删除该行,它也可以正常工作。
它在没有返回任何内容的情况下工作的原因是您将指向数组a
的指针作为参数传递给sort
然后修改数组 - 称为{ {1}}在该功能内部 - 到位。因此,只有一个数组,因此您不必返回另一个数组或指针,以便在x
中显示更改。