码迷,mamicode.com
首页 > 其他好文 > 详细

《斯坦福大学:编程范式》第5节1:void*类型的使用:一个兼容所有类型的线性搜索

时间:2018-07-11 01:05:06      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:函数   oid   返回   msi   base   线性   add   arc   key   

 

void* lsearch( void *key, void *base, int n, int elemSize , int  (*compare)(void* a, void* b))  //这里使用函数指针

{

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

  {

     //这里 使用了一个hack, (char*)base 迫使 后面的+的 i*elemSize 变成char型, 也就是  i*elemSize* typeof(char)

    //第二个hack 是 返回值为void*,compare函数的比较是从高位(第一位为符号位)按位对比,有一个不符合则返回-1或1(根据大小),这样我们不需要知道 key 和base是什么类型就可以比较。

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

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

    {

                  return elemAddr;

    }

  }

  return NULL;

} 

《斯坦福大学:编程范式》第5节1:void*类型的使用:一个兼容所有类型的线性搜索

标签:函数   oid   返回   msi   base   线性   add   arc   key   

原文地址:https://www.cnblogs.com/sundayofit/p/9292219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!