2

我试图编写一个使用指针对数组进行排序的函数。我的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;
}
4

2 回答 2

3

你的函数返回一个int(值),而不是一个指针。您的实现 ( return *x;) 按值返回参数的第一个元素x[]

为什么我应该将 x 作为指针返回?

返回值应该表示什么?目前尚不清楚为什么在这种情况下你会返回任何东西。在你能回答之前,void会更好。

于 2012-11-10T02:10:30.720 回答
1

为什么你“必须”返回一个指针的简短答案是你显然不需要返回任何东西。您没有返回指针(而是一个int),并且您没有将返回的值用于任何事情。您可以将函数的返回类型更改为void并删除该行,return它也可以正常工作。

它在不返回任何内容的情况下工作的原因是您将指向数组的指针a作为参数传递给sort,然后在适当的位置修改数组(称为x该函数内部)。所以只有一个数组,因此您不必返回另一个数组或指向它的指针,更改在main.

于 2012-11-10T02:19:57.443 回答