C++ 函数指针的详解

来源:互联网 发布:linux密码忘了 编辑:程序博客网 时间:2024/06/07 18:50

1.函数指针

(1)一般来说函数通常包括一系列指令,通过编译后,在内存中占据了一块存储空间。

它有一个起始地址,这个起始(入口)地址就称为函数的指针。

(2)主函数在调用子函数时,就是让程序转移到函数的入口地址开始执行。

(3)我们可以定义一个指针变量用来指向函数,然后通过使用该指针变量调用此函数。

指向函数的指针:就是能够存放某个函数入口地址的指针变量。


总结了一下,函数指针有两个用途:一个是调用函数,另一个是做函数的参数 

函数指针定义的一般形式:

数据类型     (*指针变量名)(参数表);

例如:

int   (*p)(); // p为指向返回值为整型数据的函数的指针
float  (*q)(float,int); // q为指向返回值为浮点型数据的函数的指针


2.函数指针调用函数的步骤

(1)函数指针变量先要指向函数

定义了指向函数的指针变量,就可以在指针变量与特定函数之间建立关联,让指针变量指向特定函数。 

要注意一下:

(1)指针变量只能指向定义时所指定的一类函数。

  (2)一个指针变量可以先后指向多个不同的函数。


具体代码:

#include <stdio.h>

int  arr_add(int (*arr)[4], int n, int m )

void main()
{   
int a[3][4] = {1,3,5,7,9,11,13,15,17,19,21,23};
int  *p, total1, total2;
int  (*pt)(int (*arr)[4], int n, int m );
   pt=arr_add;
   total1 = arr_add( a,3,4 );
  total2 = (*pt)( a,3,4 );
   printf( "total1 = %d, total2 = %d\n", total1,total2 );
}

int  arr_add(int (*arr)[4], int n, int m )
{  
int  i, j, sum=0;
    for(i=0;i<n;i++)
for( j = 0; j < m; j++ )
        sum += arr[i][j];        
    return (sum);
}


1 0