指針和函數(shù)的各種結(jié)合,看到都頭疼,以前也看過這方面的,可是不久又忘了,好記性不如賴筆頭,做一下整理。
先讓自己懵逼一下(類型隨意吧)
- int (*p)(int a,int b)
- typedef int(*Multi)(int a, int b);
- int (*)[10] p;
- int* (*fun1)(char * p1,char * p2);
- char * *fun2(char * p1,char * p2);
- char * fun3(char * p1,char * p2);
- ((void() ())0)();
反正我一眼看著很懵逼 還是慢慢來吧
函數(shù)指針
- 格式:返回類型(*指針名)(參數(shù))
-
int (*p)(int a,int b)函數(shù)指針p 指向一個(gè)函數(shù),該函數(shù)返回類型int,該函數(shù)還有兩個(gè)int類型的參數(shù)
使用方法如下
#include <iostream>
using namespace std;
int add(int x, int y)
{
return x + y;
}
void print(int(*p)(int x, int y),int a,int b)//將函數(shù)指針作為參數(shù),后面的a,b需要加上,因?yàn)閜中的x,y不可見
{
cout << "this is a print function,the result is " << p(a, b) << endl;
}
int(*funPoint)(int a, int b);//聲明一個(gè)函數(shù)指針
int _tmain(int argc, _TCHAR* argv[])
{
funPoint = add;//funPoint指向add的地址,add后面不能帶參數(shù)
//下面三種方式等同,結(jié)果一樣
cout << (*funPoint)(2, 4) << endl;
cout << funPoint(2,4) << endl;
cout << add(2, 4) << endl;
//將函數(shù)指針作為參數(shù)
print(add, 2, 4);//輸出print函數(shù)中的結(jié)果
return 0;
}
不過這個(gè)函數(shù)指針,在作為別的函數(shù)的參數(shù)時(shí),寫的好麻煩,需要把自己的參數(shù)都帶上,print(int(*p)(int x, int y),int a,int b)能不能簡單點(diǎn),可以用typedef啊
typedef函數(shù)指針
- 格式:typedef 返回類型 (*函數(shù)指針名)(參數(shù))
-
typedef int(*p)(int a, int b)這樣就可以將p 作為一個(gè)類型來看待了
實(shí)現(xiàn)如下:
#include <iostream>
using namespace std;
typedef int(*Multi)(int a, int b);//這樣寫就可以將函數(shù)指針作為一個(gè)類型了
int mul(int x, int y)
{
return x*y;
}
void show(Multi a, int x, int y)//將函數(shù)指針作為參數(shù),省了不少事
{
cout << "this is a Multi function, the result is " << a(x, y) << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Multi a = mul;//如果沒有加typedef,只能寫成:Multi = mul
//以下三種方式一樣
cout << mul(2, 4) << endl;
cout << a(2, 4) << endl;
cout << (*a)(2, 4) << endl;
//將函數(shù)指針作為參數(shù)
show(a, 2, 4);
return 0;
}
后幾個(gè)類型,參考一個(gè)這個(gè)博客:c語言函數(shù)指針的理解與使用 寫的很詳細(xì)了