iOS基础知识:指针函数和函数指针

原创 2015年11月18日 21:47:34

指针函数:

        其实就是指针的函数,本质上还是一个函数

  函数的返回值,是一个指针的时候,就叫指针函数。


 定义语法:

        类型 * 函数名(参数列表){

            函数体;

        }

    注意:这个*可以放在类型和函数名中间的任意位置


 内存中有一个地方叫栈区,栈区里面放的是局部变量

 有一个特点:出了作用域,就会回收

    注意:C语言中的数据类型只要是局部的都是存在栈里面的

         用处的话:只能返回全局变量或者返回字符串常量,还可以返回静态变量的地址


#include <stdio.h>

int qNum = 40;

int *test(){ //函数名是test 返回值是int *

//    int num = 10;   

//    int *p = &num; 

//    return &num;   

      return &qNum;

}


char *test2(){ 

    char *str = "abc";

    return str;

}

int main(int argc, const char * argv[]) {

    /*

    int *p = test();用int*类型的指针来接受同样类型的返回值

    int nums[100] = {0};

    printf("%d\n",*p);

    */

    char *strn = test2();//用char*类型的指针来接受同样类型的返回值

    printf("%s\n",strn);

    return 0;

}



函数指针:

        函数的指针,本质上一个指针,指向函数的指针,就是一个函数指针。


 我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令

 先存在内存里面,然后CPU读取内存里的指令,既然存到内存里面,一定有一个地址

 所以,我们可以定义一个指针变量保存函数的地址,那么这样的指针变量就是函数指针

 

对比:普通指针和函数指针

 int num = 10;

 int *p = &num;


    函数指针定义语法

                返回值类型  (*指针变量)(参数列表);

         例: void (*pTest)(); //变量名:pTest   这个指针指向的是无返回值无参数的函数类型

                 void (*pTest2)(int);//变量名:pTest2  这个指向的是无返回值有1个int类型参数的函数


        tips:直接复制函数头,把大括号去掉,把函数名用一个小括号括起来,函数名前面加一个*,函数名重新改成变量名

 

    指针变量赋值:

            语法: 

                指针变量名 = 函数名;

            例: pTest = test;

            因为函数名本身就是一个指向自己函数的地址

            吐血要求:函数名后面千万不要加()

 

            在声明的时候初始化

                返回值类型 (*指针变量名)(参数列表) = 函数名;

                例:void (*pTest)() = test;


    函数指针的使用:

            1.指针变量名(参数列表);(推荐)

                pTest();

                pTest2(90);

            2.(*指针变量名)(参数列表);

            例: (*pTest)();

                (*pTest2)(90);



#include <stdio.h>

void test(){

    printf("test\n");

}


void test2(int num1){

    printf("num1=%d\n",num1);

}


void test3(int num1,int num2){

    printf("num1=%d   num2=%d\n",num1,num2);

}


int test4(int num1,int num2){

    return num1 + num2;

}

int main(int argc, const char * argv[]) {

//    void (*pTest)(); //变量名:pTest   这个指针指向的是无返回值无参数的函数类型

//    pTest = test;

    

    void (*pTest)() = test;

    (*pTest)();

    

    void (*pTest2)(int);//变量名:pTest2  这个指向的是无返回值有1个int类型参数的函数

    pTest2 = test2;

    pTest2(90);

    

    void (*pTest3)(int,int) = test3;

    pTest3(20,30);

       

    int (*ptt)(int num1,int num2) = test4;

//    int res = ptt(10,40);

//    printf("res=%d\n",res);

    

    printf("%d\n",ptt(10,40));

    

    return 0;

}


iOS开发学习第十二课——函数指针定义 、函数回调 、动态排序

//函数指针的定义:指向函数的指针成为函数指针,用来存储函数的地址(即首地址,也就是函数名,因为首地址就是函数的入口地址)     //函数调用  第一种方法:直接调用函数名,传入相应的参数即可 ...
  • sen147258369
  • sen147258369
  • 2015年06月03日 22:39
  • 446

Objective-C Block与函数指针比较、分析

今天从一个小例子开始对Objective-C里面函数指针和Block进行剖析。 函数指针是C语言里面就有的,而Objective-C是C的超集,对C语言作了很多扩展(这种扩展主要是依赖编译器和运行时系...
  • linysuccess
  • linysuccess
  • 2016年06月07日 10:54
  • 1483

iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*

一、内存分配函数 1、void * malloc(参数(需要分配的内存空间的大小)); void * malloc(参数1(元素所占用空间大小) * 参数2(元素个数)); 不会进行清零操作 ...
  • lboboby
  • lboboby
  • 2014年08月01日 15:40
  • 1200

IOS typedef 函数指针的用法

代码简化, 促进跨平台开发的目的.  typedef 行为有点像 #define 宏,用其实际类型替代同义字。  不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力...
  • think12
  • think12
  • 2013年01月08日 15:37
  • 7925

iOS基础知识:指针函数和函数指针

指针函数:         其实就是指针的函数,本质上还是一个函数   当函数的返回值,是一个指针的时候,就叫指针函数。  定义语法:         类型 * 函数名(参数列表){       ...
  • strangerben
  • strangerben
  • 2015年11月18日 21:47
  • 327

黑马程序员---IOS基础---指针函数与函数指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----指针函数与函数指针 一、指针函数 (1)定义:返回值为一个某一类型指针的函数称为指针函数。 (2)...
  • white0702
  • white0702
  • 2015年06月09日 15:51
  • 220

面试题之指针函数与函数指针的区别

1.指针函数 先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。 [cpp] view plain copy ...
  • sum_TW
  • sum_TW
  • 2016年12月09日 16:26
  • 2596

指针函数与函数指针--两个简单例子进行说明

一直都对两个概念有所混淆--指针函数与函数指针,下面我们通过两个例子来讲解一下 ------------------------------------------------------------...
  • u014131641
  • u014131641
  • 2016年04月09日 14:44
  • 4124

iOS 的 指针函数

typedef void (ArrayBlock)(NSArray *); 定义了一个类型ArrayBlock, 这个ArrayBlock是一个函数指针类型, 这个函数返回void,有一个参数NS...
  • rfjian123
  • rfjian123
  • 2013年07月04日 10:22
  • 1604

C语言----函数指针

回调函数1、 函数指针 做参数 2、 回调过程 例代码// // main.m // C_Project_12 // // Created by on 15/3/26. // Cop...
  • zhengang007
  • zhengang007
  • 2015年06月17日 16:44
  • 488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS基础知识:指针函数和函数指针
举报原因:
原因补充:

(最多只允许输入30个字)