【问题标题】:Why do I have to return pointer?为什么我必须返回指针?
【发布时间】:2012-10-30 09:25:05
【问题描述】:

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

【问题讨论】:

  • 您为什么退回任何东西?你不用它。
  • 不,你要把它扔掉。如果它像 ret = sort(a,n) 你会使用它。

标签: c arrays sorting pointers


【解决方案1】:

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

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

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

【讨论】:

  • @filemonster 这是因为x[] 是作为指向sort 的指针传递的。该数组是通过引用。 sort 正在改变数组:int a[n];
  • 我是指针新手,所以我没有在其中使用指针。我不应该返回任何东西吗?一旦排序函数运行,它会改变主函数中的数组。
  • @filemonster 完全正确。注意:在 C 中,int x[] 就像 int* x(有你的指针)
【解决方案2】:

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

它在不返回任何内容的情况下工作的原因是您将一个指向数组a 的指针作为参数 传递给sort,然后修改数组——在其中被称为x功能——到位。因此只有一个数组,因此您不必返回另一个数组或指向该数组的指针,即可在 main 中看到更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2015-02-04
    相关资源
    最近更新 更多