文档章节

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

lyh2017iOS
 lyh2017iOS
发布于 2017/07/06 01:26
字数 652
阅读 3
收藏 0
点赞 0
评论 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语言数组与指针一本道来

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

PcDack
2017/12/04
0
0
十四、返回指针的函数与指向函数的指针

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

长平狐
2013/03/28
75
0
最丑陋的 C 语言特性:tgmath.h

是一个在C99引入的,标准C语言库提供的头文件。对于Fortran编写的数值软件,它向C语言提供更加简洁的接口。 跟C语言不同,Fortran提供了编写在该语言内部的“固有函数”,其表现得更像操作符...

oschina
2013/10/11
7K
18
指针的使用

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

大道无名
2016/10/22
10
0
十三、指针和字符串

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

长平狐
2013/03/28
51
0
十一、指针

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

长平狐
2013/03/28
36
0
内存管理&& 函数

1.NULL就是NULL,在许多编译器中它被定义为0。表示指针不指向任何地址。 2.NUL是ASCII码表中的第1个字符,表示的是空字符,其ascii码值为0。虽然两者的值都为0,但表示的意义不一样。 3.一般在...

zray4u
2016/06/01
3
0
C语言基础-15-typedef

这讲介绍C语言中很常用的一个关键字---typedef。 一、typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 #include <stdio.h> typedef int Integer;typedef...

Corwien
2016/03/16
12
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

50 行 Python 代码,带你追到最心爱的人

程序员世纪难题 人们一提到程序员第一反应就是:我知道!他们工资很高啊!但大部分都是单身狗,不懂得幽默风趣,只是每天穿格子 polo 衫的宅男一个。甚至程序员自己也这样形容自己:钱多话少...

猫咪编程
9分钟前
0
0
JAVA知识点随心记

1.Switch case具体的支持类型? Q:支持byte、short、char、int基本类型,枚举类型和String类型(JDK7以上支持),四种基本类型的包装类型也支持,但是原因在于触发了自动拆箱,将包装类型拆成了基本...

勤奋的蚂蚁
20分钟前
0
0
NoSQL

一、NoSQL介绍 NoSQL属于非关系型数据,mysql属于关系型数据库。 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当数据量非常大的时候...

人在艹木中
25分钟前
0
0
第17章MySQL主从配置

mysql安装总结 mysql主从准备工作: 准备两台机器,每台机器安装msyql服务,并启动mysql服务 mysql详细安装 1.首先下载二进制免编译的包,下载到/usr/local/src/目录下 2.解压压缩包 3.解压完...

Linux学习笔记
28分钟前
0
0
Redis高可用及分片集群

一、主从复制 使用异步复制 一个服务器可以有多个从服务器 从服务器也可以有自己的从服务器 复制功能不会阻塞主服务器 可以通过服务功能来上主服务器免于持久化操作,由从服务器去执行持久化...

Java大蜗牛
32分钟前
0
0
前端面试题汇总

最近在复习,准备找工作了,特此总结一下前端的相关知识。 1.获取浏览器URL中查询字符的参数: function getQuery(name){    var reg = new RegExp("(^|&)"+name+"=([^&]*)"(&|$));...

凛冬来袭
今天
0
0
可持续发展的学习道路

与其要求别人,不如提升自己 内心渴望进步 经常做出改变现有模式,不断学习 寻找资源,整合资源,不断熟练这种模式 渠道很重要 先打开新世界的航路

狮子狗
今天
0
0
apollox-lua开源项目 示例codepen2

今天在示例上增加了几个功能, 首先添加js array的标准库。 所有js array的方法目前都支持了。 添加查看code模式。 点击查看code可以看到生成的lua代码。默认web模式需要把标准库连接进来, ...

钟元OSS
今天
0
0
javascript性能优化之避免重复工作

javascript最重要也最根本的性能优化标准之一是避免工作,避免工作又包括两点,第一,不做不必要的工作,第二,不做重复的已经完成的工作。第一部分可以通过代码重构完成,第二部分不做重复的...

老韭菜
今天
0
0
缓存穿透、并发和雪崩那些事

0 题记 缓存穿透、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题,本文讲解其产生原因和解决方案。 缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由设计不足造成的;缓存雪...

Java填坑之路
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部