1.函數指針
(1)一般來說函數通常包括一系列指令,通過編譯後,在內存中占據了一塊存儲空間。
它有一個起始地址,這個起始(入口)地址就稱為函數的指針。
(2)主函數在調用子函數時,就是讓程序轉移到函數的入口地址開始執行。
(3)我們可以定義一個指針變量用來指向函數,然後通過使用該指針變量調用此函數。
指向函數的指針:就是能夠存放某個函數入口地址的指針變量。
總結了一下,函數指針有兩個用途:一個是調用函數,另一個是做函數的參數
函數指針定義的一般形式:
數據類型 (*指針變量名)(參數表);
例如:
int (*p)();
// p為指向返回值為整型數據的函數的指針
float (*q)(float,int); // q為指向返回值為浮點型數據的函數的指針
2.函數指針調用函數的步驟
(1)函數指針變量先要指向函數
定義了指向函數的指針變量,就可以在指針變量與特定函數之間建立關聯,讓指針變量指向特定函數。
要注意一下:
(1)指針變量只能指向定義時所指定的一類函數。
(2)一個指針變量可以先後指向多個不同的函數。
具體代碼:
#include
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
sum += arr[i][j];
return (sum);
}