前言:一般函式的用法函式(參數) 但是這裡式使用進階用法函式(函式)這種 方式在c函式庫裡常常看到例如qsort(void* array ,size_t array,size_t item, int (*compar) (const void*,const void*))。
提醒:c語言中,函式在宣告的時候就已經是指標位置了,所以我們不存在 Funtion *x 這種宣告,因為函式回傳值沒有固定的類別,帶入的參數也沒有。
???? aa ( ???????)
{
return ?????????;
}
提醒2:如何建造函式的指標呢??
假設有一個函式
int i_am_a_function (int a, char* b)//函數宣告本身就是一個指標位置
{
..............................................
}
我想宣告一個指標取代這個函式
int (*replace) (int, char*);
replace = i_am_a_function;
replace(2,"sucessful"); 等同於 i_am_a_function(2,"sucessful");
qsort 函式(函式) sample code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_scores(const void*,const void*);
int compare_str(const void* ,const void* );
int main(int argc, char *argv[])
{
int scores [] ={543,323,32,554,11,3,112};
qsort(scores,7,sizeof(int),compare_scores);
int i ;
for(i =0; i< sizeof(scores)/4;i++)
{
printf("%i\n",scores[i]);
}
char *name []={"chou","yi","ming","is","pig"};
qsort(name,sizeof(name)/4,sizeof(char*),compare_str);
for(i=0;i<sizeof(name)/4;i++)
{
printf("%s\n",name[i]);
}
return 0;
}
int compare_scores(const void* x,const void* y)
{
int a = *(int*)x;
int b = *(int*)y;
return a-b;
}
int compare_str(const void* stra ,const void* strb)
{
char** a =(char**)stra; // 補充 void* 型別轉回 (char*)* = 字串*
char** b =(char**)strb;
return strcmp(*a,*b);
}
沒有留言:
張貼留言