文档章节

第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语言数组与指针一本道来

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

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

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

长平狐
2013/03/28
75
0
指针的使用

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

大道无名
2016/10/22
10
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
5
0
现场看路演了!

HiBlock
昨天
16
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
19
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部