C/C++函數指針,指針函數的用法,用處


 先看函數指針
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);
}
View Code

例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();
}
View Code

 

再看指針函數:
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是指向二維數組的指針,加*取一維數組的指針

這句很經典。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM