C语言基础学习——第8天(函数指针)
来源:互联网 发布:js判断map是否包含key 编辑:程序博客网 时间:2024/05/16 18:15
00function_pointer.c
#include <stdio.h>int add(int l, int r){ return l + r;}int sub(int l, int r){ return l - r;}int main(void){ // 定义了一个函数指针变量. // pfunc 是 int (*)(int, int) 类型. // pfunc 指向 int ()(int, int) 类型. int (*pfunc)(int, int) = NULL; int a = 15, b = 6; int ret; // 函数名字代表函数地址. // 第一种赋值和调用方式 pfunc = add; ret = pfunc(a, b); printf("ret = %d\n", ret); printf("----------------\n"); // 第二种赋值和调用方式 pfunc = ⊂ ret = (*pfunc)(a, b); printf("ret = %d\n", ret); return 0;}运行结果:ret = 21----------------ret = 9
01main.c
#include <stdio.h>int main(void){ int (*pfunc)(void) = NULL; void *p = NULL; pfunc = main; p = main; // 打印出main函数的地址, main 与 &main 的值是一样的 printf("pfunc = %p, main = %p, &main = %p\n", pfunc, main, &main); printf("p = %p, main = %p, &main = %p\n", p, main, &main); return 0;}运行结果:pfunc = 0x80483e4, main = 0x80483e4, &main = 0x80483e4p = 0x80483e4, main = 0x80483e4, &main = 0x80483e4
02callback.c
#include <stdio.h>int add(int l, int r){ return l + r;}int operation(int (*pf)(int, int), int l, int r){ return pf(l, r);}int main(void){ int a = 15, b = 6; int ret = 0;(2) // 回调函数(callback function) add即为回调函数. // (1)定义一个回调函数 --> add函数已经定义好 // (2)提供函数实现的一方在初始化的时候, 将回调函数的函数指针注册给调用者 --> pf拿到了add的地址 // (3)当特定的事件或条件发生的时候, 调用者使用函数指针调用回调函数对事件进行处理 --> pf(l, r)即相当于执行了add ret = operation(add, a, b); printf("ret = %d\n", ret); return 0;}
03typedef.c
#include <stdio.h>// #define 是预处理器指令.// #define 通常做字符串替换.#define INT32 int// typedef 是编译器关键字.// typedef 做类型替换.typedef int int32;// func_t 是函数类型, 代表 int ()(int, int)typedef int (func_t)(int, int);// pfunc_t 是函数指针类型, 代表 int (*)(int, int)typedef int (*pfunc_t)(int, int);int add(int l, int r){ return l + r;}int sub(int l, int r){ return l - r;}int main(void){ INT32 a = 15, b = 6; int32 ret = 0; // func_t *pf = NULL; pfunc_t pf = NULL; // 此种比较常用 pf = add; ret = pf(a, b); printf("ret = %d\n", ret); pf = sub; ret = pf(a, b); printf("ret = %d\n", ret); return 0;}运行结果:ret = 21ret = 9
04return_function_pointer.c
#include <stdio.h>typedef int (*pfunc_t)(int, int);int add(int l, int r){ return l + r;}int sub(int l, int r){ return l - r;}// choice_func 以 int choice 作为函数参数,// 返回 int (*)(int, int) 类型的函数指针.// int (*choice_func(int choice))(int, int)pfunc_t choice_func(int choice){ if (choice == 0) return add; else return sub;}int main(void){ int a = 15, b = 6; int ret = 0; ret = choice_func(0)(a, b); printf("ret = %d\n", ret); ret = choice_func(1)(a, b); printf("ret = %d\n", ret); return 0;}
05const_pointer.c
#include <stdio.h>int main(void){ int a = 0x55; // const int *p = NULL; // p 本身可修改, 不能通过 p 修改 *p; int const *p = NULL; p = &a; // *p = 0x66; error: assignment of read-only location '*p' a = 0x66; printf("a = %#x, *p = %#x\n", a, *p); printf("------------------------\n"); // p 本身不可修改(必须初始化) int * const p1 = &a; // p1 = &a; // error: assignment of read-only variable 'p1' *p1 = 0x33; printf("a = %#x, *p1 = %#x\n", a, *p1); return 0;}运行结果:a = 0x66, *p = 0x66------------------------a = 0x33, *p1 = 0x33
0 0
- C语言基础学习——第8天(函数指针)
- C语言基础学习——第5天(指针)
- C语言基础学习——第3天(函数)
- C语言基础学习——第7天(二维数组、指针数组等)
- C语言基础学习——第2天(语句)
- C语言基础学习——第4天(数组)
- C语言基础学习——第11天(预处理)
- C语言基础 函数指针
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- 【读书笔记】20150905Java编程那些事儿
- 从Hadoop到Spark的架构实践
- NDK开发之访问域
- TableView基本使用
- GDB调试ARM程序
- C语言基础学习——第8天(函数指针)
- LeetCode Roman to Integer
- 线性规划与网络流24题 01飞行员分配方案问题
- PAT Advanced 1019
- 线性规划与网络流24题 02太空飞行计划问题 最小割
- 漫谈C指针第六讲---从 const int i 说起
- 【Android进阶】-Android组合的方式自定义控件
- django 1.8 官方文档翻译: 3-3-4 管理文件
- 解决ngnix服务器上的Discuz!x2.5 Upload Error:413错误