day11基础代码——函数指针
//
// 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基础代码——函数指针的更多相关文章
- 嵌入式-C语言基础:函数指针
定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址. 和数组一样,数组名代表地址,而函数名表示函数 ...
- C++学习基础十七-- 函数指针
C++常用的函数指针 语法:返回值类型 (*函数名)(参数列表); 举例说明:int (*Func)(int m, int n); 用typedef简化函数指针的定义 例如: typedef int ...
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助
小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧 ...
- 你必须知道的指针基础-7.void指针与函数指针
一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...
- C基础--函数指针的使用
之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: lin ...
- 编程算法 - 求1+2+...+n(函数指针) 代码(C++)
求1+2+...+n(函数指针) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\whi ...
随机推荐
- LianLianKan - HDU 4272(状态压缩)
题目大意:有一列数据,可以从最上面的开始连接下面相同的元素,然后消除,不过距离不能超过6,询问最后能不能消除完整个数列. 分析:首先讨论一点最远能消除的地方,比如点的位置是x,如若想要消除x+1位置处 ...
- Archipelago - SGU 120(计算几何向量旋转)
题目大意:有一个正N边形,然后给出两个点,求出剩余的点的坐标. 分析:向量旋转可以求出坐标,顺时针旋转时候,x = x'*cos(a) + y'*sin(a), y=-x'*sin(a) + y'*c ...
- 常用Dos命令笔记
0x00 磁盘FAT32格式转NTFS convert e: /fs:ntfs Tips: 语法规则: Converts a FAT volume to NTFS. CONVERT volume /F ...
- UVaLive4043 UVa1411 Ants 巨人与鬼
题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...
- ListBoxControl 删除选择的项的方法
public void RemoveSelectItems<T>(BaseListBoxControl listControl) { var list ...
- win7重装系统时,使用PE工具箱进入系统看到的“C盘变成0.2G,D盘变成48G左右”这是什么回事?
引入: 今天帮同学重装系统,重装系统使用的方法是利用PE工具箱制作出启动U盘,进行重装系统. 我的步骤是 第一步:开机按F2挂载U盘优先启动,于是开机时就进入PE微系统 第二步: 用分区工具(Disk ...
- history对象back()、forward()、go()
history对象back().forward().go()方法history.back() 功能:加载历史列表中的前一个URL(后退). 语法:history.back() 调用该方法的效果等价于点 ...
- PHP拦截器的使用(转)
PHP有如下几个拦截器: 1.__get($property)功能:访问未定义的属性是被调用2.__set($property, $value)功能:给未定义的属性设置值时被调用3.__isset($ ...
- iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略
我是前言: 大约几个月前我在某平台写了一篇文章, 文中简单地介绍了Charts两种图表的样式的使用, 不过有种意犹未尽的感觉, 利用周末的空闲时间再次看了看, 有了新的收获, 今天发出来,分享给大家, ...
- Java基础知识强化之集合框架笔记31:集合之泛型类的概述和基本使用
1. 为什么会有泛型呢? (1)早期的Object类型可以接收任意的对象类型,但是在实际使用中,会有类型转换的问题,也存在这隐患,所以Java提供了泛型来解决这个安全问题. 2. 泛型类的使用: (1 ...