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その関数内で) その場で変更しているためです。そのため、配列は 1 つしかないため、変更を に表示するために、別の配列またはそれへのポインターを返す必要はありません。sortxmain

于 2012-11-10T02:19:57.443 に答える