1. 程式人生 > >感受下函式指標(指標函式)和結構體內部函式

感受下函式指標(指標函式)和結構體內部函式

函式指標是指向函式的指標,指標函式是函式返回指標型別
//函式指標
#include<stdio.h>
int fun(int a)
{
	return a*a;
} 

int dy(int (*f)(int x),int a)
{
	return f(a);
}

int main()
{
	int a=9;
	int sum;
	int (*f)(int x)=fun;
	sum=dy(f,a);//f是函式指標,這裡指向fun 
	printf("%d\n",sum);
}

網上找的一段程式碼,關於指標函式的。

 int (*) (double*, char);這個指標指向一個函式,此函式返回int型並帶有兩個分別是double*型和char型的形參。
只是用typedef簡化一下,
typedef int (*fpAdd)(int a,int b);
就是用fpApp代替了int(*)(int a,int b);
//指標函式
#include<stdio.h>
#include<string.h>
//返回普通指標 
int* sum(int *f)
{
	return f;
} 

//返回函式指標
typedef int (*fpAdd)(int a,int b);

//宣告兩個和fpAdd型別一致的函式
int AddTest(int a,int b);
int AddTestAdd5(int a,int b);
//宣告兩個返回函式指標的函式
fpAdd GetAddFun();
fpAdd GetAdd5Fun();

 
int main()
{
 int a = 1;
 int b = 2;
 int sum;
 //取得指向函式(AddTest)的指標
 fpAdd add = GetAddFun();
 //取得指向函式(AddTestAdd5)的指標
 fpAdd add5 = GetAdd5Fun();
 //通過函式指標呼叫函式。
 sum = add(a,b);
 //輸出結果
 printf("a+b=%d\n",sum);

 sum = add5(a,b);
 //輸出結果
 printf("a+b=%d\n",sum);

 
 //getch();
 }
 
 
int AddTest(int a,int b)
{
 return a+b;
}
int AddTestAdd5(int a,int b)
{
 return a+b+5;
}
fpAdd GetAddFun()
{
 return AddTest;
}
fpAdd GetAdd5Fun()
{
 return AddTestAdd5;
}


結構體和類其實就是一個咚咚。

//結構體內部函式
 
#include<stdio.h>

struct student{
int num;

//int (*sum)(int x);
int sum(int x)
{
	return x;
}

};

int main()
{
	int x;
	struct student s1;
	s1.num=1;
	x=s1.sum(s1.num);
	printf("x=%d",x);
}