C语言--------指向函数的指针

 

指向函数的指针:

1.函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用  来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

 定义的一般形式:函数的返回值类型 ( * 指针变量名)(形参1, 形参2, ...);
 
2.指向函数的指针的定义格式:
   
 2.1普通指针的定义格式
   数据类型 *指针变量名称
   int *p;
 2.2指向函数的指针的定义格式
     void (*指针变量名) ();
     void (*funtionP) ();
    
     *    : 代表是一个指针
     funtionP      : 代表指针变量的名称, 
     (*funtionP) : 代表将来用这个指针变量将来指向一个函数
     void   : 代表将来指向的函数没有返回值
     ()       : 代表将来指向的函数没有参数
3.通过指向函数的指针间接调用函数的方式:
 1.    (*funtionP) (参数);
 2.  foundation (参数);
实例:
//  main.c
//  指向函数的指针
//
//  Created by apple--王迅 on 15/8/23.
//  Copyright (c) 2015年 apple. All rights reserved.
/*
    指向函数的指针:
    定义格式
 
 指向函数的指针的定义格式
 void (*funtionP) (参数列表);
 
 *    : 代表是一个指针
 funtionP    : 代表指针变量的名称, 区分
 (*funtionP) : 代表将来指向一个函数
 void : 代表将来指向的函数没有返回值
 ()   : 代表将来指向的函数没有参数
 

#include <stdio.h>
int sum(int a,int b){
    return a+b;
}
int cha(int a,int b){
    return a-b;
}

int main(int argc, const char * argv[]) {
  //定义一个返回值为int 参数为(int ,int)的 foundation指向函数的指针,这个指针变量只能用来指向函数(只能接受函数的地址),并且函数的返回值为int以及函数有两个整型形参
    int  (*foundation)(int ,int);   //注意定义格式
 
    //将要调用的函数sum的地址传给指针变量foundation,此时这个指向函数的指针foundation就指向了函数sum,
    //函数名==函数的地址    跟数组一样,数组名==数组地址==数组首元素地址
    foundation=sum;  //注意:不能写成 foundation =sum()
   
    //通过指向函数的指针,间接的调用函数
    //1.间接调用函数调用方式1
    //int result1 =foundation(10,20);

    //2.间接调用函数方式2
    int resut2 =(*foundation)(10,20);
    printf("%d",resut2);
    return 0;
}
 
10.指针为什么要分类型?
     1. 指针在Mac系统64位的编译器中不管是几级指针或者是什么了下的指针都只占8个字节是不变的,如果是32位的话占4个字节,和编译环境有关的
     2. 指针之所以分类型就只是我们在通过指针变量的时候,系统会根据我们定义的那个指针变量类型从他所指向的
     那个内存空间开始取值多少个字节,如果指针类型是char,那木系统会根据char占用一位存储单元也就是8个字节开始从他所指向的那个存储单元取出一·   位,也即是8个字节,如果是int型,那木就访问所指向的那个存储单元的4位也就是32个字节,而long long 最多也就是8位最多就是64为
 
 
 
posted @ 2015-08-23 23:17  王迅  阅读(656)  评论(0)    收藏  举报