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);
}