为什么我必须返回指针?

时间:2012-11-10 02:08:21

标签: c arrays sorting pointers

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

2 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:1)

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

它在没有返回任何内容的情况下工作的原因是您将指向数组a的指针作为参数传递给sort然后修改数组 - 称为{ {1}}在该功能内部 - 到位。因此,只有一个数组,因此您不必返回另一个数组或指针,以便在x中显示更改。