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;

}


相关文章推荐

基础知识---const/typedef/函数指针/回调函数

变量:      左值:(lvalue),左值可以出现在赋值语句的左边或右边      右值:(rvalue),右值只能出现在赋值的右边,不能出现在赋值语句的左边。变量是左值,因此可以出现在赋值语句的...

C/C++基础知识:函数指针和指针函数的基本概念

【函数指针】       在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代...

c/c++基础(八) 函数指针

指向函数的指针:        一个函数在编译时

C语言函数指针基础

原文链接:  Dennis Kubes 译文链接: http://blog.jobbole.com/44639/            本文写的非常详细,因为我想为初学者建立一个...

函数指针基础

函数指针 函数名是执行函数体的入口地,函数名本身就是一个指针。函数指针是指向函数的指针,通过函数指针(函数的入口地址)就可以执行函数体。 对函数名取多少地址都一样,以及取多少个*操作都一样还是其本身,...

C++基础---函数指针

1. 函数指针 1.1 函数指针的定义 函数指针:指向函数的指针变量,本质是一个指针变量。 函数指针有两个用途:调用函数和做函数的参数。 函数指针声明方法:返回值类型 ( * 指针变量名)(形参列...
  • cainv89
  • cainv89
  • 2015年09月04日 17:08
  • 274

【C++ 基础 11】 函数指针总结

指针函数,函数指针,typedef简化函数指针的使用,类中非静态成员函数和静态成员函数的调用。...

【C++】C语言函数指针基础

参考自 http://blog.jobbole.com/44639/#jtss-ydnote 本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无...

iOS开发学习之C语言---C10 函数指针-2

// //  main.m //  C10 函数指针-2 // //  Created by 康亮亮 on 15/10/20. //  Copyright (c) 201...

LinuxC/C++编程基础(1) 函数指针实现复数的加减乘除

一.复数结构体的定义,如下,代码简单明了,无需赘述: #ifndef COMPLEXDATA_H_ #define COMPLEXDATA_H_ #include namespa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS基础知识:指针函数和函数指针
举报原因:
原因补充:

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