文档章节

第09天C语言(07):指向函数的指针-基本概念

lyh2017iOS
 lyh2017iOS
发布于 2017/07/06 01:26
字数 652
阅读 3
收藏 0

#pragma mark 指向函数的指针-基本概念 ###pragma mark 概念

/**
 对OC的block有很大的帮助
 
 指向函数的指针 的定义格式
 // 加上一个() 说明这个指针将来要指向 一个 函数
 // 函数有以下
 没有返回值没有参数
 有返回值没有参数
 没有返回值有参数
 有返回值有参数
 
 *              : 代表一个指针
 funtionP       : 代表指针变量的名称,区分
 (*funtionP)    : 代表将来指向一个函数
 void (*futionP)() 没有返回值没有参数的指针
 void           : 代表将来指向的函数 没有返回值
 ()             : 代表将来指向的函数 没有参数
 
 */
 

###pragma mark 代码

#include <stdio.h>
void text() // 0x100000f20
{
    printf("我这行了\n");
}

int getAge()
{
    return 30;
}
void sum (int v1,int v2)
{
    int res = v1 + v2;
    printf("res = %i\n",res);
}
int sum2 (int v1,int v2)
{
    int res = v1 + v2;
    return res;
}

// 函数也会占用一块存储空间
// 因为函数也会占用一块存储空间,所以函数也有自己的地址
// 函数的地址保存在函数名中
// 函数名就是函数的地址  == 数组名就是数组的地址
int main()

{
    printf("text = %p\n",text);
#warning 如何定义一个指针 指向 函数
    /*
     指向函数的指针 的定义格式
     // 加上一个() 说明这个指针将来要指向 一个 函数
     // 函数有以下
     没有返回值没有参数
     有返回值没有参数
     没有返回值有参数
     有返回值有参数
     
     *              : 代表一个指针
     funtionP       : 代表指针变量的名称,区分
     (*funtionP)    : 代表将来指向一个函数
     void (*futionP)() 没有返回值没有参数的指针
     void           : 代表将来指向的函数 没有返回值
     ()             : 代表将来指向的函数 没有参数
  
     普通指针的定义格式
     数据类型 *指针变量名称
     int *p;
     */
#warning 解释
    /*
    void (*funtionP) () ;
    
    funtionP = text; // 注意: 千万不能写text()
//    text(); // 之前调用函数  0x100000ef0 ();
    (*funtionP)();  // 0x100000ef0();
    // text == funtionP
    funtionP();
    
//    int num = 10;
//    int *p = #
//    printf("%i\n",*p);
    
    int ages[] = {1,3,5};
    int *p;
    p = ages;  // ages就是数组的地址
     */
    /*
     ages[0];
     p[0];
     *(p + n);
     */
    
#warning 练习
    // 有返回值 没有参数
    int (*ageP) ();
    ageP = getAge; // 注意这里一定不要加() 加()表示调用函数 我们只需需要把函数的地址 赋给 指针
    ageP();
    printf("age = %i\n",ageP());
    
    // 没有返回值 有参数(形参)
//    void (*sumP) (int v1,int v2);
    void (*sumP) (int,int); // 可以省略形参的名称,只需要写数据类型
    sumP = sum;
    sumP(20,20);
    
    // 有返回值 有参数
    int (*sumP2) (int ,int);
    sumP2 = sum2;
    printf("sum2 = %i\n",sumP2(10,15));
    
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
私信 提问
解读 C 语言中的指针

我想对很多学习C语言的新手来说,指针无疑是一个难点。但是,我觉得指针也是C语言特别重要的一个特性。也许,你在除了C和C++以外的编程语言中,很少看到指针。而C++中,也多用引用,而非指针...

数通畅联
2016/07/21
21
0
C语言-第七章、用指针实现程序的灵活设计

7_1 指针的基本概念 _1.1 地址与指针 C语言中通常把地址成为指针。 _1.2 内存单元的指针与内存单元的内容 _1.3 变量的指针 变量的指针就是变量的地址 _1.4 直接访问与间接访问 7_2 指向变量的...

南风末
2016/11/04
11
0
十四、返回指针的函数与指向函数的指针

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 前言 前面我们花了...

长平狐
2013/03/28
89
0
C语言数组与指针一本道来

数组与指针.png 一本道来其他系列 C语言关键字 C语言注释符号一本道来 C语言编译预处理技术一本道来 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用或其他 指针...

PcDack
2017/12/04
0
0
指针的使用

1.指针与别名陷阱 如果有一块内存区域,指向这块内存区域的指针有多个,其中每一个指针都是其他指针的别名。 别名操作在优化程序是会造成很多麻烦,如下面的例子: 上面的两段代码,第一段访...

大道无名
2016/10/22
10
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7 Nginx+rtmp 搭建流媒体服务器

一. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: yum -y install gcc gcc-c++ 二. PCRE pcre-devel 安装 PCRE(Perl Compatib...

legend3
25分钟前
2
0
“别更新了,学不动了” 之:全栈开发者 2019 应该学些什么?

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文转载自 公众号 infoqchina 对于什么是全栈开发者并没有一个明确的定义。但是,有一件事是...

葡萄城技术团队
41分钟前
6
0
OSChina 周五乱弹 —— 姑娘馋的口水都留下来了。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Fall Out Boy的单曲《Disloyal Order Of Water Buffaloes》 《Disloyal Order Of Water Buffaloes》- Fall Out Boy 手机党...

小小编辑
今天
672
14
vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部