//

//  main.m

//  Demo11

//

//  Created by scjy on 15/10/29.

//  Copyright © 2015年 lizhipeng. All rights reserved.

//

#import <Foundation/Foundation.h>

//typedef int (*MAXV)(int ,int );//形参名可以省略

typedef int (*MAXV)(int x,int y);//相当于把int (*)(int x,int y)定义成了MAXV

int maxValue(int x,int y){

return x > y ? x :y;

}

int sum(int x,int y) {

return x + y;

}

int mult(int x,int y) {

return x * y;

}

char printfhello(char str){

return str;

}

void printhello0(char str){

printf("%c\n",str);

}

void printhello(char *str){

printf("大家好,我叫%s\n",str);

}

typedef int (*SUN)(char *a ,char *b);

int sun(char *a,char *b){

int str = strcmp(a,b);

return str;

}

int getValue(int x,int y,MAXV P){

return P(x,y);

}

int main(int argc, const char * argv[]) {

@autoreleasepool {

//*************** 第十一讲 函数指针*********************//

//函数指针定义 函数是存在代码区,也是有内存地址的。

//函数声明 函数定义 函数调用

printf("%d\n",sum(123, 456));

printf("%p\n",&sum);

//函数指针定义: int(*)(int x ,int y)= null 指针定义

//数据类型 (*指针变量名)(形式参数列表) 初值null

//        char stra = 'h';

//        char *strb =&stra;

printf("这是一个字符:%c\n",printfhello('h'));

//定义一个可以指向上述函数的函数指针,并通过函数指针实现调用该函数。

//函数 指针 字符串

printhello0('h');

//        char str0[6] = "hello";

//        char *str =str0;

printhello("hello");

//        void (*p1)(char *str) = NULL;

//        p1 = printhello;

//        p1("hello");

int (*p) (int x,int y) = NULL;

p = sum;

printf("%d\n",p(7,9));

//函数指针重指向

p = mult;

printf("%d\n",p(5,12));

//        int (*p3)(int x,int y) = NULL;

//        p3 = maxValue;

//        printf("%d\n",p3(6,5));

MAXV p3 = maxValue;

printf("%d\n",p3(60,5));

//        char str4[6] = "he";

//        char str5[6] = "llo";

//        char *strr1 = str4;

//        char *strr2 = str5;

SUN p4 = sun;

printf("---===%d\n",p4("he","llo"));

//给函数指针赋值的 函数,应该和函数指针定义的函数原型 保持一致。

//定义两个 函数 ,一个求 最大值,一个 求和,输入maxValue或sum分别求3,5的最大值或和

//(提示,定义一个 函数指针 ,根据输入内容指向不同函数,最后一次调用完成)。

//        MAXV p5 = NULL;

//        char let[10];

//        printf("输入maxValue或sum:\n");

//        scanf("%s",let);

//        if (strcmp(let, "maxValue") == 0) {

//            p5 = maxValue;

//        } else if (strcmp(let, "sum") == 0) {

//            p5 = sum;

//        } else {

//            printf("null....\n");

////            return 0;

//        }

//        if (p5 != NULL) {

//            printf("%d\n",p5(60,5));

//        }

////        printf("%d\n",p5(60,5));

//回调函数callback

MAXV p6 = NULL;

p6 = mult;

//        int h = getValue(3, 5, p6);

printf("%d\n",getValue(3, 5, p6));

MAXV p7 = sum;

printf("%d\n",p7(7,9));

printf("%d\n",getValue(6, 6, p7));

printf("%d\n",getValue(6, 6, mult));

printf("%d\n",getValue(6, 6, maxValue));

//动态排序

//        //2.

//        int (*p)(int x, int y);

//        p = sum;

//        int y = p(7, 9);

//        printf("y = %d\n", y);

//        //3.

//        int (*p)(int x, int y) = sum;

//        int y = p(7, 9);

//        printf("y = %d\n", y);

//        //4.

//        int (*p)(int, int) = NULL;

//        p = sum;

//        int y = p(7, 9);

//        printf("y = %d\n", y);

}

return 0;

}

day11基础代码——函数指针的更多相关文章

  1. 嵌入式-C语言基础:函数指针

    定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址. 和数组一样,数组名代表地址,而函数名表示函数 ...

  2. C++学习基础十七-- 函数指针

    C++常用的函数指针 语法:返回值类型 (*函数名)(参数列表); 举例说明:int (*Func)(int m, int n); 用typedef简化函数指针的定义 例如: typedef int ...

  3. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...

  4. C++基础——函数指针 函数指针数组

    ==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...

  5. C语言函数指针基础

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

  6. 小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助

    小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧 ...

  7. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  8. C基础--函数指针的使用

    之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: lin ...

  9. 编程算法 - 求1+2+...+n(函数指针) 代码(C++)

    求1+2+...+n(函数指针) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\whi ...

随机推荐

  1. Struct2 向Action中传递参数(中文乱码问题)

    就是把视图上的值传递到Action定义的方法中 也就是把数据从前台传递到后台 三种方式: 1.  使用action属性接收参数 比如jsp页面: <body> 使用action属性接收参数 ...

  2. python数据类型和3个重要函数

    Python中所有变量都是值的引用,也就说变量通过绑定的方式指向其值. 而这里说的不可变指的是值的不可变. 对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被 ...

  3. TOMCAT启动完成但是ECLIPSE仍然显示starting....

    最近重新部署了一个TOMCAT服务,但是启动碰到个问题,虽然TOMCAT控制台已显示启动成功,但是ECLIPSE右下角仍然一直显示STARTING,最后TOMCAT超时,启动失败. 之前以为是拷贝工程 ...

  4. 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)

    作者:一只猿 原文地址: http://www.92ez.com 转载请注明出处,谢谢 帮助说明 如果您认为QuoJS只是一个触摸事件管理器,那你就错了,它是一个功能丰富的类库,无需第三方JavaSc ...

  5. 浅谈UML中类之间的五种关系及其在代码中的表现形式

    本文转载:http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html 什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种 ...

  6. 关于setLayoutParams报错

    有两个可能的原因  1.内部view没有用其parent的LayoutParams在继承BaseAdapter的时候,用getView返回View的时候,用代码控制布局,需要用到View.setLay ...

  7. 手机安全卫士开发系列(2)——splash界面

    一.Android中的MVC (1)activity主要用来页面的展示 (2)engine包:获取数据和展示数据(包含数据适配器) (3)domain包:存放数据实体 第一种包结构组织关系: 第二种包 ...

  8. Linux内核之mmc子系统-sdio

    现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统.这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及 ...

  9. Notepad++如何安装并使用source code pro 字体 转

      http://blog.yucanlin.cn/2015/04/08/linux-%E5%AE%89%E8%A3%85-source-code-pro-%E5%AD%97%E4%BD%93/ ht ...

  10. 单例模式,多种实现方式JAVA

    转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): public class Singleton { private stati ...