1. #include <stdio.h>
  2. typedef void (*intFunc)(int i);
  3.  
  4. void test1(int age)
  5. {
  6. printf("test1:%d\n",age);
  7. }
  8. int test2(char *str,int i)
  9. {
  10. }
  11. void foreachNums(int *nums,int len,intFunc func)
  12. {
  13. int i;
  14. for(i=;i<len;i++)
  15. {
  16. int n = nums[i];//*(nums+i)
  17. func(n);
  18. }
  19. }
  20. void printIt(int i)
  21. {
  22. printf("value=%d\n",i);
  23. }
  24. void print100(int i)
  25. {
  26. printf("value=%d\n",i+);
  27. }
  28. int main(int argc, char *argv[])
  29. {
  30. //intFunc f1 = test1;//intFunc类型的函数指针指向test1函数
  31. //f1(8);//执行f1函数指针指向的代码
  32. //intFunc f2 = test2;
  33. int nums[]={,,,,};
  34. //foreachNums(nums,sizeof(nums)/sizeof(int),printIt);
  35. foreachNums(nums,
  36. sizeof(nums)/sizeof(int),print100);
  37. return ;
  38. }

http://www.rupeng.com/Segments/Index/1752

-----------------------------------------------------

  1. #include <stdio.h>
  2.  
  3. //{3,5,8,7,6}
  4. /*
  5. int max(int *nums,int len)
  6. {
  7. int i;
  8. int max=nums[0];//假定第0个元素为最大值
  9. for(i=1;i<len;i++)
  10. {
  11. int value = *nums;
  12. if(value>max)
  13. {
  14. max = value;//如果找到比max还大的,则max让位
  15. }
  16. nums++;
  17. }
  18. return max;
  19. }
  20. */
  21.  
  22. typedef struct _Dog
  23. {
  24. char* name;
  25. int age;
  26. } Dog;
  27. typedef int (*compareFunc)(void * data1,void * data2);
  28. //data 待比较数据数组的首地址,uniteSize单元字节个数
  29. //size:数据的长度。{1,3,5,6}:size=4
  30. //比较data1和data2指向的数据做比较,
  31. //如果data1>data2,则返回正数
  32. void* max(void* data,int unitSize,int size,
  33. compareFunc func)
  34. {
  35. int i;
  36. char *ptr = (char *)data;
  37. char *max = ptr;//假定最开始的元素为最大值
  38. for(i=;i<size;i++)
  39. {
  40. char* item = ptr+i*unitSize;//计算第i个元素的首地址
  41. if(func(item,max)>)//如果item大于max
  42. //到底取几个字节进行比较是func内部的事情
  43. {
  44. max = item;
  45. }
  46. }
  47. return max;//最大值的首地址
  48. }
  49.  
  50. //data1是第一个被比较数字的首地址
  51. int intCompare(void* data1,void *data2)
  52. {
  53. int* ptr1 = (int*)data1;
  54. int* ptr2 = (int*)data2;
  55. int i1=*ptr1;
  56. int i2=*ptr2;
  57. return i1-i2;
  58. }
  59.  
  60. int dogCompare(void* data1,void* data2)
  61. {
  62. Dog* dog1 = (Dog*)data1;
  63. Dog* dog2 = (Dog*)data2;
  64. return (dog1->age)-(dog2->age);
  65. //return (dog2->age)-(dog1->age);
  66. }
  67.  
  68. int main(int argc, char *argv[])
  69. {
  70. /*
  71. int nums[] = {3,5,8,7,6};
  72. int *pMax = (int *)max(nums,sizeof(int),sizeof(nums)/sizeof(int),
  73. intCompare);
  74. int max = *pMax;
  75. printf("%d\n",max);
  76. */
  77. /*Dog dogs[] ={{"沙皮",3},{"腊肠",10},{"哈士奇",5},{"京巴",8},{"大狗",2}};*/
  78. /*Dog *pDog = (Dog *)max(dogs,sizeof(Dog),
  79. sizeof(dogs)/sizeof(Dog),dogCompare);
  80. printf("%s=%d",pDog->name,pDog->age);*/
  81. /*qsort(dogs,sizeof(dogs)/sizeof(Dog),sizeof(Dog),dogCompare);
  82. int i;
  83. for(i=0;i<sizeof(dogs)/sizeof(Dog);i++)
  84. {
  85. Dog dog = dogs[i];
  86. printf("%s=%d|",dog.name,dog.age);
  87. }*/
  88. int nums[] = {,,,,};
  89. qsort(nums,sizeof(nums)/sizeof(int),sizeof(int),
  90. intCompare);
  91. int i;
  92. for(i=;i<sizeof(nums)/sizeof(int);i++)
  93. {
  94. int n = nums[i];
  95. printf("%d|",n);
  96. }
  97.  
  98. return ;
  99. }

http://www.rupeng.com/Segments/Index/1754

c语言函数指针的更多相关文章

  1. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  2. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  3. “对外部(局部)变量的访问”是C语言函数指针的最大弱点

    1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...

  4. C语言函数指针 和 OC-Block

    C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...

  5. C语言函数指针实验

    上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's ...

  6. C语言函数指针的用法

    函数指针是一种在C.C++.D语言.其他类 C 语言和Fortran 2003中的指针.函数指针可以像一般函数一样,用于调用函数.传递参数.在如 C 这样的语言中,通过提供一个简单的选取.执行函数的方 ...

  7. c语言函数指针的理解与使用

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun ...

  8. C语言函数指针(转载)

    二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int a ...

  9. C语言函数指针变量和指针函数以及指针数组

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...

  10. C语言函数指针与 c#委托和事件对比

    C语言: 函数指针可以节省部分代码量,写类似具有多态的函数,比如要比较最大值,如果不用函数指针就只能写比较某一类型比如int类型的max函数,这个max无法比较string的大小.函数指针的意义就不多 ...

随机推荐

  1. (十一)socket、connect、bind函数详解

    一.socket函数 1.头文件: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> 2.函数原型: ...

  2. sshfs三步走----实用(mac)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } p.p2 { margin: 0.0px 0. ...

  3. 模拟微信上传图片(带预览,支持预览gif)

    一.Html <style type="text/css"> #previewDiv{width:50px;height:50px;overflow:hidden;po ...

  4. 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  5. 配置appium 1.6.3 for MAC

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } 安装 ...

  6. 解决:Redis:java.util.NoSuchElementException: Unable to validate object at

    在Java使用Redis的过程中遇见了一个问题, redis.clients.jedis.exceptions.JedisConnectionException: Could not get a re ...

  7. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  8. SQL Server Management Studio 已停止工作 异常错误

    找到类似环境下sql的路径 D:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\ 复制出 Ss ...

  9. 用于阻止div上的事件和div上的按钮的事件同时触发

    event.stopPropagation()  阻止事件冒泡  用于ie11以上

  10. 关于easyui遇到的一些问题

    一.TreeGrid在IE浏览器中不能刷新 在创建TreeGrid的时候将method: 'get' 改成 method: 'post' , 然后再$('#ProductGrid').treegrid ...