私は両方を試しました -C
そしてC++
両方ともうまくいきます。
私は関数ポインタにちょっと慣れていませんが、これは私を驚かせた簡単なコードです:
#include <assert.h>
void sort( int* arr, const int N );
int main ()
{
int arr1[] = { 1, 5, 2, 6, 2 };
int arr2[] = { 1, 5, 2, 6, 2 };
void (*sort_ptr)( int*, const int) = sort;
sort_ptr( arr1, 5 );
(*sort_ptr)( arr2, 5 );
assert( arr1[0] == 1 && arr1[1] == 2 && arr1[2] == 2 &&
arr1[3] == 5 && arr1[4] == 6 );
assert( arr2[0] == 1 && arr2[1] == 2 && arr2[2] == 2 &&
arr2[3] == 5 && arr2[4] == 6 );
return 0;
}
void sort( int* arr, const int N )
{
// sorting the array, it's not relevant to the question
}
それで、違いは何ですか
sort_ptr( arr1, 5 );
と
(*sort_ptr)( arr2, 5 );
どちらも機能しているようで (エラーなし、警告なし、並べ替えられた配列)、ちょっと混乱しています。どちらが正しいですか、それとも両方とも正しいですか。