《斯坦福大学:编程范式》第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;

} 

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

时间: 2024-09-28 01:53:53

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

《斯坦福大学:编程范式》第二节:基本数据类型在内存中的二进制表达

我们以C/C++为例. 基本数据类型有: bool        1 byte char 1 byte       256个字符,其中75个字符是常用的   short 2bytes int 4bytes long 4bytes float 4 bytes double 8 bytes ---------------------------bytes------------------------------------- 1 bytes(字节) = 8 bit(位 binary digit)

《斯坦福大学公开课:编程方法学》随笔

这是观看网易公开课 Mehran Sahami教授的<斯坦福大学公开课:编程方法学>后的随笔. 目前只看到第三次课,<Karel与Java>,我的收获有以下要点: 1.软件工程跟普通的写代码是不同的.软件应该考虑很多东西,比如:可移植性.便于升级维护等等,而不仅仅是写出代码实现功能那么简单. 2.代码是写给机器执行的,但更重要的是人要让人能看懂.(代码后期维护等等的工作量或者时间是写代码的10倍及更多,所以让代码更规范更易被人读懂很重要) 3.准确定义一个函数.一个类.一个包的功能

Deep Learning 12_深度学习UFLDL教程:Sparse Coding_exercise(斯坦福大学深度学习教程)

前言 理论知识:UFLDL教程.Deep learning:二十六(Sparse coding简单理解).Deep learning:二十七(Sparse coding中关于矩阵的范数求导).Deep learning:二十九(Sparse coding练习) 实验环境:win7, matlab2015b,16G内存,2T机械硬盘 本节实验比较不好理解也不好做,我看很多人最后也没得出好的结果,所以得花时间仔细理解才行. 实验内容:Exercise:Sparse Coding.从10张512*51

【编程范式】C语言1

最近在网易公开课上看斯坦福大学的<编程范式>,外国人讲课思路就是清晰,上了几节课,感觉难度确实比我们普通大学大很多,但是却很有趣,让人能边学边想. 范式编程,交换两个数,利用 void * void Swap (void * lhs,void * rhs,int size) { void * temp = malloc(sizeof(size)); memmove(temp,lhs,sizeof(size)); memmove(lhs,rhs,sizeof(size));  memmove(r

Deep Learning 十_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)

前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab2015b,16G内存,2T机械硬盘 实验内容:Exercise:Convolution and Pooling.从2000张64*64的RGB图片(它是the STL10 Dataset的一个子集)中提取特征作为训练数据集,训练softmax分类器,然后从3200张64*64的RGB图片(它是th

Deep Learning九之深度学习UFLDL教程:linear decoder_exercise(斯坦福大学深度学习教程)

前言 实验内容:Exercise:Learning color features with Sparse Autoencoders.即:利用线性解码器,从100000张8*8的RGB图像块中提取彩色特征,这些特征会被用于下一节的练习 理论知识:线性解码器和http://www.cnblogs.com/tornadomeet/archive/2013/04/08/3007435.html 实验基础说明: 1.为什么要用线性解码器,而不用前面用过的栈式自编码器等?即:线性解码器的作用? 这一点,Ng

斯坦福大学 iOS 开发公开课总结

 斯坦福大学 iOS 开发公开课总结 前言 iPhone 开发相关的教程中最有名的,当数斯坦福大学发布的 “iPhone 开发公开课 “ 了.此公开课在以前叫做<iPhone 开发教程>,今年由于平板电脑的流行,所以也加入了 ipad 开发相关的课程.在 网易公开课 上,有 该教程 的 2010 年录象,并且前面 15 集带中文字幕文件,非常适合初学者学习. 在这里顺便说一下,网易公开课上的 28 集其实并不需要全部看完.真正的课程只有前面 12 集.后面的课程都是请一些业界的名人讲他们成功的

斯坦福大学CS224d基础1:线性代数知识

斯坦福大学CS224d基础1:线性代数知识 作者:Zico Kolter (补充: Chuong Do) 翻译:@MOLLY([email protected]) @OWEN 校正:@寒小阳([email protected]) @龙心尘([email protected]) 2015年9月30日 1基本概念和符号????2 1.1基本符号????2 2 矩阵乘法????3 2.1向量的乘积????3 2.2矩阵-向量的乘积????4 2.3矩阵-矩阵乘积????5 3 运算和性质????6 3

斯坦福大学CS224d基础1:线性代数回顾

斯坦福大学CS224d基础1:线性代数知识 作者:Zico Kolter (补充: Chuong Do) 时间:2016年6月 翻译:@MOLLY([email protected]) @OWEN([email protected]) 校正:@寒小阳([email protected]) @龙心尘([email protected])  出处:http://blog.csdn.net/han_xiaoyang/article/details/51629242 http://blog.csdn.n