0

私は現在、関数へのポインターを研究しており、ソート配列関数で練習しています。ポイントは、一連の数値を関数に入力すると、プログラムがそれを昇順に再配置することです。値関数による呼び出しを行うと、うまく機能しました(それがあなたの呼び出し方だと思います)。ただし、関数にポインターを割り当てて、関数自体の代わりにそのポインターを使用しようとすると、一連のエラーが返されます。この問題は、配列を引数として関数 POINTER に渡していることが原因であると確信しています。これが私のコードです:

#include<stdio.h>
#define SIZE 10

void sort(int a[], int size);
void swap(int *elt1, int *elt2);
main()
{
    int i; int array[SIZE]= {1,9,3,2,4,100,43,23,32,12};
    void (*fptr)(int array, int SIZE);
    fptr = &sort;
    (*fptr)(array,SIZE);
    /*sort(array, SIZE);*/
    for(i=0;i<SIZE;i++)
    {
            printf("%d\n", array[i]);
    }
    return 0;
}

void sort(int a[], int size)
{
    int pass, j;
    for(pass = 0; pass<size;pass++)
    {
            for(j=0;j<size;j++)
            {
                    if(a[j]>a[j+1])
                    {
                            swap(&a[j], &a[j+1]);
                    }
            }

    }


}


void swap(int *elt1, int *elt2)
{
    int hold;
    hold = *elt1;
    *elt1 = *elt2;
    *elt2 = hold;

}
4

1 に答える 1

7

int関数の最初の引数は(つまり)へのポインターであり、int *ではありませんint

void (*fptr)(int array, int SIZE);

する必要があります

void (*fptr)(int *array, int SIZE);
于 2013-02-10T19:30:34.640 に答える