《斯坦福大学:编程范式》第5节1:void*类型的使用:一个兼容所有类型的线性搜索
Posted 百无禁忌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《斯坦福大学:编程范式》第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, (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*类型的使用:一个兼容所有类型的线性搜索的主要内容,如果未能解决你的问题,请参考以下文章
《斯坦福大学:编程范式》第三节:* 与&的技巧大端与小端最小寻址单位