#include <stdio.h>
typedef void (*intFunc)(int i); void test1(int age)
{
printf("test1:%d\n",age);
}
int test2(char *str,int i)
{
}
void foreachNums(int *nums,int len,intFunc func)
{
int i;
for(i=;i<len;i++)
{
int n = nums[i];//*(nums+i)
func(n);
}
}
void printIt(int i)
{
printf("value=%d\n",i);
}
void print100(int i)
{
printf("value=%d\n",i+);
}
int main(int argc, char *argv[])
{
//intFunc f1 = test1;//intFunc类型的函数指针指向test1函数
//f1(8);//执行f1函数指针指向的代码
//intFunc f2 = test2;
int nums[]={,,,,};
//foreachNums(nums,sizeof(nums)/sizeof(int),printIt);
foreachNums(nums,
sizeof(nums)/sizeof(int),print100);
return ;
}

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

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

 #include <stdio.h>

 //{3,5,8,7,6}
/*
int max(int *nums,int len)
{
int i;
int max=nums[0];//假定第0个元素为最大值
for(i=1;i<len;i++)
{
int value = *nums;
if(value>max)
{
max = value;//如果找到比max还大的,则max让位
}
nums++;
}
return max;
}
*/ typedef struct _Dog
{
char* name;
int age;
} Dog;
typedef int (*compareFunc)(void * data1,void * data2);
//data 待比较数据数组的首地址,uniteSize单元字节个数
//size:数据的长度。{1,3,5,6}:size=4
//比较data1和data2指向的数据做比较,
//如果data1>data2,则返回正数
void* max(void* data,int unitSize,int size,
compareFunc func)
{
int i;
char *ptr = (char *)data;
char *max = ptr;//假定最开始的元素为最大值
for(i=;i<size;i++)
{
char* item = ptr+i*unitSize;//计算第i个元素的首地址
if(func(item,max)>)//如果item大于max
//到底取几个字节进行比较是func内部的事情
{
max = item;
}
}
return max;//最大值的首地址
} //data1是第一个被比较数字的首地址
int intCompare(void* data1,void *data2)
{
int* ptr1 = (int*)data1;
int* ptr2 = (int*)data2;
int i1=*ptr1;
int i2=*ptr2;
return i1-i2;
} int dogCompare(void* data1,void* data2)
{
Dog* dog1 = (Dog*)data1;
Dog* dog2 = (Dog*)data2;
return (dog1->age)-(dog2->age);
//return (dog2->age)-(dog1->age);
} int main(int argc, char *argv[])
{
/*
int nums[] = {3,5,8,7,6};
int *pMax = (int *)max(nums,sizeof(int),sizeof(nums)/sizeof(int),
intCompare);
int max = *pMax;
printf("%d\n",max);
*/
/*Dog dogs[] ={{"沙皮",3},{"腊肠",10},{"哈士奇",5},{"京巴",8},{"大狗",2}};*/
/*Dog *pDog = (Dog *)max(dogs,sizeof(Dog),
sizeof(dogs)/sizeof(Dog),dogCompare);
printf("%s=%d",pDog->name,pDog->age);*/
/*qsort(dogs,sizeof(dogs)/sizeof(Dog),sizeof(Dog),dogCompare);
int i;
for(i=0;i<sizeof(dogs)/sizeof(Dog);i++)
{
Dog dog = dogs[i];
printf("%s=%d|",dog.name,dog.age);
}*/
int nums[] = {,,,,};
qsort(nums,sizeof(nums)/sizeof(int),sizeof(int),
intCompare);
int i;
for(i=;i<sizeof(nums)/sizeof(int);i++)
{
int n = nums[i];
printf("%d|",n);
} return ;
}

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. U盘修复

    方法一: 1.点开始-运行-输入cmd-format f: /fs: FAT32 (这里f:是指U盘所在盘符) 2.打开控制面板-管理工具-计算机管理-磁盘管理-找到U盘的所在的盘符--点右键--删除 ...

  2. Media Player插件

    <object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" ...

  3. 转:如何向妻子解释OOD

    如何向妻子解释OOD 前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非 ...

  4. Evolutionary Computing: multi-objective optimisation

    1. What is multi-objective optimisation [wikipedia]: Multi-objective optimization (also known as mul ...

  5. phalcon: 当删除循环删除一组数据,需要判断影响的行affectedRows

    phalcon:有一个表,按日期查找半年以为的数据,由于数据量特别大,不能一次:delete删除数据,否则会造成数据表卡顿,数据库锁死. 那么只能循环的删除数据,每次删除100条左右,知道删除为止., ...

  6. express+gulp构建项目(一)项目目录结构

    express是基于nodejs平台的web框架,它可以让我们快速开发出web引用.而gulp是一种自动构建工具,非常强大,有了它,能帮我们完成很多繁琐的工作,例如,静态文件的压缩,为静态文件加上哈希 ...

  7. DEVExpress GridControl|TableView |FormatConditions 按一定格式设置相应内容

    Get到一个新技能,感觉好棒.摘自DEV官网:https://www.devexpress.com/Support/Center/Example/Details/T135593 <Window ...

  8. 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器

    现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...

  9. 实现password框中显示文字提示的方式

    其实实际上实现中并不能让password中显示文字提示,但是我们在工作中有这样的需求,当没输入东西的时候,框内有提示输入密码,但是当输入东西的时候又显示的是*号,那么是如何实现的呢?其实原理很简单,就 ...

  10. 两个div叠加触发事件发生闪烁问题

    今天遇到一个问题,想实现一个功能: 当鼠标移到div1上的时候,会出现div2.出现时div2在div1的上面,div2在出现后发生闪烁的问题. 于是开始找问题根源,发现原来是因为当我们触发div1的 ...