指向函数的指针 - C语言
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/1368947400.html
基本概念
在C语言中,函数本身不是变量,但可以定义指向函数的指针。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值等等。
函数作为参数传递给函数时,因为它们是函数,前面不需要加取地址运算符&。同样的原因,数组名前面也不需要&运算符。
代码实现
测试代码如下:
# include <stdio.h>
int compare(int a, int b);
void hello(int a, int b, int (* compare)(int , int));
int main(void)
{int a, b;a = 3;b = 3;hello(a, b, * compare);
}
int compare(int a, int b)
{return a == b;
}
void hello(int a, int b, int (* compare)(int, int))
{if((* compare)(a, b)) {printf("Hello.\n");}
}
分析:
hello函数的第三个参数声明如下:
int (* compare)(int , int)
它表明compare是一个指向函数的指针,该函数有两个int类型的参数,其返回值类型为int。
在下列语句中:
if((* compare)(a, b))
compare的使用与其声明是一致的,同时要注意运算符的优先级。
参考资料
- 《C程序设计语言》,Kernighan著,徐宝文译,第二版:Page118
(全文完)
转载于:https://www.cnblogs.com/milkcu/archive/2013/05/19/3808891.html
指向函数的指针 - C语言相关推荐
- 指向函数的指针--转
http://book.51cto.com/art/200908/146363.htm 5.1.2 指向函数的指针 C语言通过&和*操作符来操作数据的地址,但它并没有提供一个用一般的方式来操作 ...
- C语言学习笔记---指向函数的指针
在内存中函数的存放也是一段连续的内存,函数名就是指向改内存中的首地址,所以也可以将这个函数的首地址赋给一个指针变量,这样通过指针变量就可以访问改函数. 那么为什么要通过指针来访问函数呢?下面通 ...
- c语言handler指针,typedef与指向函数的指针结合的妙用
今天看到keil的一个例子,里面涉及到利用typedef和指向函数的指针结合的例子,使得程序结构体系非常明了,觉得很好,特地记下来. 首先在头文件定义了这个指针,并用typedef将其声明为一个类型: ...
- C语言 指向函数的指针
C语言程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),这个地址称为函数的指针.可以定义指向函数的指针变量,使用指针变量间接调用函数. 先用一个简单的程序来说明: #include ...
- 【C语言】函数指针(指向函数的指针)
文章目录 1. 函数指针的定义 2. 函数指针的定义形式 2.1 一般定义方法 2.2 加上typedef关键字的定义 3.利用函数指针调用其所指向的函数 3.1 情况1:一般调用 3.2 情况2:函 ...
- c语言指针怎么指向函数,C语言指针---指向函数的指针
C语言指针-指向函数的指针 1.什么是函数指针 在程序中定义了一个函数,在编译时,系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针. 一般形式: 类型名 (*指 ...
- ios 调用c语言函数指针,第09天C语言(08):指向函数的指针的应用场景
#pragma mark 指向函数的指针的应用场景 ###pragma mark 概念 ###pragma mark 代码 #include int sum(int v1,int v2) { retu ...
- C语言中指向函数的指针(我见过的讲的最清晰的文章)
转帖自: http://wenku.baidu.com/view/7e566448cf84b9d528ea7a57.html 1 定义和调用 程序在编译后,每个函数都有一个首地址(也就是函数第一条指令 ...
- 20返回指针的函数与指向函数的指针
一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...
最新文章
- python 搭建ftp服务器
- 关闭socket以及Socket选项
- NAND FLASH ECC
- 参数化测试 junit_JUnit中的参数化测试运行器
- PHP base64数据与图片的互相转换
- 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
- doe报告模板_【质量管理小组QCC活动】报告模板
- System.arraycopy详解
- Python来处理数独游戏(含世界最难数独示例)
- 每天固定往一个银行卡存入100元,5年之后会有多大变化?有人能坚持吗?
- 今年最值得期待的JavaScript传奇绿皮书登场!
- 在更新.net 4.5补丁后,VS2012突然不能打开项目,卸载补丁之后解决。
- JAVA网站后台管理系统
- 浙江新曙光建设_中习集团大厦项目工地与姜太公签约,正在使用太公管工进行实名制考勤...
- wifi无线破解记录
- 祖籍-山西省洪洞县大槐庄
- pdo mysql 函数_PDO函数属性详解
- 怎么修改电脑或者Apple手机、iPad等设备上图标的大小
- PHP 7.2禁止类名为Object的巨坑
- Docker Hub + Github 自动化构建docker镜像