Student
이라는 구조체가 있다고 가정 해 보겠습니다.qsort() - 함수 매개 변수 비교
typedef struct student {
int age;
char name[10];
} Student;
그리고 학생들에게 일련의 포인터가 있습니다.
Student *a[10];
학생들의 이름으로 배열을 정렬해야합니다.
void SortArray(Student *a[], int len){
qsort(a, len, sizeof(Student *), *compare*);
printArray(a);
}
를 qsort의 마지막 부분은 내가하지 않는 것입니다 :
int compare(const void *a, const void *b){
Student *temp1=*(Student **)a;
Student *temp2=*(Student **)b;
return strcmp(temp1->name, temp2->name);
}
가 그럼 난 정렬하는 기능을 가지고 : 그래서 비교 함수를 썼다. 내가
&compare
이라고 썼던 곳과 그렇지 않은 곳을 보았습니다. 내가
&compare
을 사용했을 때만 효과가있었습니다.
&
을 사용할지 여부를 어떻게 알 수 있습니까?
함수는 배열과 매우 유사합니다. 함수 포인터가 함수 포인터 일 때 사용되면 포인터로 감쇠됩니다. 예를 들어 일반적으로 사용하는 것이 안전합니다.'compare' 만 사용하지만, 코드 독자에게 좀 더 명시 적으로 사용하려면 'compare'를 사용하는 것이 좋습니다. –
데코레이션이 필요하지 않고 '비교'만 전달하면됩니다. – Amit
'& compare'는 정확히 같은 방식으로 명시 적/읽기 쉽습니다.'& array [0]'은 다음과 같습니다 : 언어를 아는 모든 사람들에게 혼란스럽고 추악한 말입니다. 그냥'compare' 또는'array'를 사용하십시오. ** 함수를 호출 할 때마다'func (x)'처럼'func'라는 이름은 포인터로 쇠퇴하고 있습니다. 왜냐하면'()'연산자 (함수 호출)는 피연산자로 함수 포인터를 필요로하기 때문입니다 . –