2015年7月5日 星期日

[C筆記]函式進階應用講解

前言:一般函式的用法函式(參數) 但是這裡式使用進階用法函式(函式)這種 方式在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);
    }

這邊char**不是字串陣列  
圖解



這是一個排序程式
輸出結果












沒有留言:

張貼留言