Student
という構造体があるとします。qsort() - 関数パラメータの比較
typedef struct student {
int age;
char name[10];
} Student;
私は学生へのポインタの配列を持っています。
Student *a[10];
私は学生の名前で配列をソートする必要があります。だから私は比較関数を書いた:
int compare(const void *a, const void *b){
Student *temp1=*(Student **)a;
Student *temp2=*(Student **)b;
return strcmp(temp1->name, temp2->name);
}
それから私は、ソートする機能を持っている:
void SortArray(Student *a[], int len){
qsort(a, len, sizeof(Student *), *compare*);
printArray(a);
}
のqsortの最後の部分は、私は取得しないものです。 &compare
と書かれていた投稿と、そうでないところがありました。私が&compare
を使用したときだけ、それは働いた。
&
を使用するかどうかはどうやって知りますか?
関数は配列と同じように似ています。関数へのポインタが使用されている場合は、関数へのポインタが* decay *されます。たとえば通常は安全です。'compare'だけですが、'&compare'を使用してコードの読者をより明示的にすることをお勧めします。 –
デコレーションは必要ありません。単に 'compare'を渡すだけです。 – Amit
'&compare'は明示的に/全く同じ方法で読むことができます。'&array [0] 'は次のようなものです:言語を知っている人には紛らわしく不快です。ちょうど '比較'または '配列'を使用してください。 **関数func(x)のように関数**を呼び出すたびに、 '()'演算子(関数呼び出し)がそのオペランドとして関数ポインタを必要とするため、 'func'という名前がポインタに壊れていることに注意してください。 –