先看函數指針
int func2(int x); /* 聲明一個函數 */
int (*q2) (int x); /* 聲明一個函數指針 */
q2=func2; /* 將func函數的首地址賦給指針f */
int c=(*q2)(3); //3可以為任意實參
上面4句基本說明了函數指針的用法:
函數指針是指向函數的指針,確切的說,是指向特定類型函數的指針(函數與函數指針 類型要匹配)
函數指針用來保存函數首地址,即可以通過該指針訪問函數。函數指針
相當於取別名。
函數指針可以指向一類函數,而不是一個函數,即
可以重新賦值。(見例2)
函數指針不難,只要記住上面黑體字就差不多了,附上兩個簡單的例子
例1:

#include<stdio.h> int max(int x,int y){ return(x>y?x:y); } void main() { int (*ptr)(int, int); int a,b,c; ptr=max; scanf("%d%d",&a,&b); c=(*ptr)(a,b); printf("a=%d,b=%d,max=%d",a,b,c); }
例2:

#include<stdio.h> void FileFunc() { printf("FileFunc\n"); } void EditFunc() { printf("EditFunc\n"); } void main() { typedef void (*funcp)(); funcp pfun= FileFunc; pfun(); pfun = EditFunc; pfun(); }
再看指針函數:
int *func(int x);/* 聲明一個指針函數 */
int *q; /* 聲明一個指針 */
q=func(3);//3可以為任意實參
上面三句基本說明了指針函數:
指針函數是返回值為指針的函數,所以我們在main()中調用它時可以用一個同類型的指針來接收。
指針函數可以用來解決眾多問題,如返回多個值的問題。(見"函數返回多個值的方法"那篇文章)
指針函數比經常更經常用到,一定要學會用
指針函數邏輯簡單,結構清新,功能強大,質量好,效率高,堪比極品中的鳳姐,勝過。。。(求下聯),反正不學會真是損失。
例3也是百度來的,個人覺得很經典,涉及到了指針,數組指針,指針函數,二維數組的賦值,函數返回多個值,數組指針的自增與指針自增的區別。。。眾多知識。看懂這個基本指針這一塊差不多了。
例3:
#include<iostream> using namespace std; int main() { float *find(float (*p)[4],int m);//查詢序號為m的學生的四門課程的成績 float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定義成績數組,第一維可以為變量 float *pf=NULL;//定義一個指針時一定要初始化 int i,m; //cout<<"請輸入您想查詢的學生的序號:"; cin>>m; pf=find(score,m);//返回為一維數組指針,指向一個學生成績 for(i=0;i<4;i++) cout<<*(pf+i)<<" "; cout<<endl; return 0; } float *find(float (*p)[4],int m) { float *pf=NULL; pf=*(p+m);//p是指向二維數組的指針,加*取一維數組的指針 return pf; }
pf=*(p+m);//p是指向二維數組的指針,加*取一維數組的指針
這句很經典。