函数指针实战

1、本次演示的是用函数指针指向不同的函数来实现同一个调用执行不同的结果。

2、补充点:Linux命令行默认是行缓冲的,意思就是说当我们程序printf输出的时候,Linux不会一个字一个字的输出我们的内容,而是将其缓冲起来放在缓冲区等一行准备完了再一次性把一行全部输出出来(为了效率)。Linux判断一行有没有完的依据就是换行符‘\n’(windows中是\r\n,Linux中是\n,ios中是\r)。也就是说你printf的再多,只要没遇到\n(或者是程序终止,或者是缓冲区满)都不会输出而会不断缓冲,这个时候你是看不到内容输出的。因此在每个printf打印语句后面一定要加\n,否则可能导致误判。

3、实例代码演示:

 1 #include <stdio.h>
 2
 3 int add(int a, int b);
 4 int sub(int a, int b);
 5 int mul(int a, int b);
 6 int dir(int a, int b);
 7
 8 typedef int (*pFunc)(int ,int);
 9
10 int main(void)
11 {
12     pFunc p1 = NULL;
13     int a = 0, b = 0;
14     char c = 0;
15     printf("请输入要运算的数字:\n");
16     scanf("%d %d",&a, &b);
17     printf("请输入运算法则: + - * / \n");
18     do
19     {
20         scanf("%c",&c);
21     }while(c == ‘\n‘);
22     switch(c)
23     {
24         case ‘+‘:
25             p1 = add;
26             break;
27         case ‘-‘:
28             p1 = sub;
29             break;
30         case ‘*‘:
31             p1 = mul;
32             break;
33         case ‘/‘:
34             p1 = dir;
35             break;
36     }
37     printf("%d\n",p1(a,b));
38     return 0;
39 }
40 int add(int a, int b)
41 {
42     return a + b;
43 }
44 int sub(int a, int b)
45 {
46     return a - b;
47 }
48 int mul(int a, int b)
49 {
50     return a * b;
51 }
52 int dir(int a, int b)
53 {
54     return a / b;
55 }

原文地址:https://www.cnblogs.com/jiangtongxue/p/11383699.html

时间: 2024-11-04 22:29:35

函数指针实战的相关文章

98函数指针

我们都知道,函数在内存中,本质就是一段汇编代码.调用的时候,使用call代码,执行完成之后,返回. 所谓的函数指针,其实存放着就是(函数)这段汇编代码的内存地址. 返回类型 (调用约定 * 指针名)(参数列表); 可能有人的听说过(游戏外挂).比如一个游戏外挂里面有一个函数. run(方向,步数) 当我们写好一个程序,利用技术手段,把我们的程序注入到游戏的内存里面.并且找到游戏里run函数的内存地址,利用函数指针,就可以自己调用了. 当然,现在不理解的话,以后我们再给大家实战演习. 只要记住一点

单继承与多继承中的虚函数表和虚函数指针

首先,我们了解一下何为单继承,何为多继承?? 单继承:一个子类只有一个直接父类. 多继承:一个子类有两个或多个直接父类. 单继承中的虚函数表分析: 示例程序: #include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virt

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

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

恼人的函数指针(一)

原文链接:http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html 这篇是为了加深记忆所写.发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的. 1)  函数指针的初始化. 函数如下: int CompareString(const string& str1, const string& str2) { return str1.compare(str2); } 函数的初始化有两种方式: 第一种,也是最普遍的方式:

C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程中执行.最终目标是,继承的业务逻辑类外部调用时有两个接口可选,调用syncRun同步执行:调用由引擎自动生成的asyncRun就异步执行.最终自动生成asyncRun的模板基类没能实现,主要原因是mingw对this处理的太有问题了!!原本以为编译器问题,后来才知道成员函数指针和this指针如此特殊

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

C语言函数、函数指针解析

函数.函数指针的理解: 函数的定义: void myfunc(void) { } 函数的声明 void myfunc(void); 函数指针的定义.初始化.赋值: 定义:void (*funcp)(void); 初始化: void (*funcp)(void) = &myfunc; 赋值 void (*funcp)(void); funcp = &myfunc; 函数调用:(*funcp)(); funcp(); 也可以这样赋值:void (*funcp)(void); funcp = m

6.7 函数指针

函数指针重载:参数类型要匹配,指针类型必须精确匹配 使用decltype作用于某个函数时,要显示加上*以表示我们需要返回指针,而非函数本身 int func(int a, int b); using pFunc1 = decltype(func) *;typedef decltype(func) *pFunc2;using pFunc3 = int (*)(int a, int b);using pFunc4 = int(int a, int b);typedef int(*pFunc5)(in

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________