《斯坦福大學:編程範式》第5節1:void*類型的使用:一個兼容全部類型的線性搜索

 

void* lsearch( void *key, void *base, int n, int elemSize , int  (*compare)(void* a, void* b))  //這裏使用函數指針函數

{指針

  for(int i = 0; i< n; i++)hack

  {co

     //這裏 使用了一個hack, (char*)base 迫使 後面的+的 i*elemSize 變成char型, 也就是  i*elemSize* typeof(char)return

    //第二個hack 是 返回值爲void*,compare函數的比較是從高位(第一位爲符號位)按位對比,有一個不符合則返回-1或1(根據大小),這樣咱們不須要知道 key 和base是什麼類型就能夠比較。void

    void* elemAddr = (char*)base + i*elemSize; search

              if(compare(key,elemAddr) == 0)arc

    {

                  return elemAddr;

    }

  }

  return NULL;

} 

相關文章
相關標籤/搜索