#include <stdlib.h>
#include <string.h>
int cmp(const void *a,const void *b)
{
return strcmp(*(const char**)a,*(const char**)b);
}
int main()
{
char *arr[] = {"eat", "teaa", "cat", "hat", "tata", "tae"};
int size = 6;
int i;
qsort(arr,6,sizeof(char*),cmp);
for(i=0;i<size;i++)
{
printf("%s ",arr[i]);
}
printf("\n");
return 0;
}
cmp func中的a or b之意義為,array of string中的某一個element(即某一個string pointer)的位址,意即an pointer's address。
而關於strcmp(*(const char**)a,*(const char**)b),這一行中strcmp所需要吃的參數型態為const char*型態之字串,而a and b目前為const void*型態,故我們需要將他們轉型,首先先轉成前述an pointer's address,即an string's address's address之型態,故會先cast為const char**,cast完後a and b已是string's address's address,而strcmp的需求參數為const char*即為const string's address,故a and b只需要再加一個星號取值,即可拿到string' address並正確餵入strcmp func,故最後轉型方式為*(const char**)a,*(const char**)b。
沒有留言:
張貼留言