1. 程式人生 > >通過函式指標呼叫函式

通過函式指標呼叫函式

說明:

指標可以不但可以指向一個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向一個函式。

一個函式在編譯的時候會被分配給一個入口地址。這個函式入口地址稱為函式的指標。可以用一個指標變數指向函式,然後通過該指標變數呼叫此函式。

定義指向函式的指標變數的方法是:

int (*p) (int ,int );

int【指標變數p指向的函式的型別】 (*p)【p是指向函式的指標變數】 ( int,int )【p所指向的形參型別】;

與函式的原型進行比較

int max  (int, int );

int【函式的型別】 max【函式名】 ( int,int )【函式的形參型別】;

一個例子:

一般方法的程式碼:

#include<iostream>
using namespace std;
int main(){
	int max(int x,int y);
	int a,b,c,m;
	cout<<"Please input three integers:"<<endl;
	cin>>a>>b>>c;
	m=max(max(a,b),c);
	cout<<"Max="<<m<<endl;
	return 0;	
} 
int max(int x,int y){
	int z;
	if(x>y){
		z=x;
	} else{
		z=y;
	}
	return z;
}

然後,我們定義一個指標變數,指向max函式,然後通過該指標變數呼叫函式。

通過(*p)來呼叫函式

#include<iostream>
using namespace std;
int main(){
	int max(int x,int y);
	int (*p) (int x,int y);
	p=max;
	int a,b,c,m;
	cout<<"Please input three integers:"<<endl;
	cin>>a>>b>>c;
	m=(*p)((*p)(a,b),c);
	cout<<"Max="<<m<<endl;
	return 0;	
} 
int max(int x,int y){
	int z;
	if(x>y){
		z=x;
	} else{
		z=y;
	}
	return z;
}

可以通過指標p直接呼叫函式

#include<iostream>
using namespace std;
int main(){
	int max(int x,int y);
	int (*p) (int x,int y);
	p=max;
	int a,b,c,m;
	cout<<"Please input three integers:"<<endl;
	cin>>a>>b>>c;
	m=p(p(a,b),c);
	cout<<"Max="<<m<<endl;
	return 0;	
} 
int max(int x,int y){
	int z;
	if(x>y){
		z=x;
	} else{
		z=y;
	}
	return z;
}

用指向函式的指標作為函式的引數

函式指標變數最常見的用途之一是作為函式的引數,將函式名傳遞給其他函式的形參。這樣那個就可以在呼叫一個函式的過程中,根據給定的不同的實參,呼叫不同的函式。

例如,利用該方法解決,兩個函式y1=(x+1)^1;   y2=(2x+3)^2   ;   y3=(x^2+1)^3

分析:編寫3個函式f1,f2,f3,用來求上面3個函式x+1,2x+3,x^2+1的值。

然後編寫一個通用函式Squar,他有兩個形參:a次方和指向函式、

程式程式碼:

#include<iostream>
#include<math.h>
using namespace std;
double fun1(double n){
	double r;
	r=n+1;
	return r;
}
double fun2(double n){
	double r;
	r=2*n+3;
	return r;
}
double fun3(double n){
	double r;
	r=(pow(n,2)+1);
	return r;
}
double Squar(int a, double x, double(*p)(double )){
	double r,z;
	z=(*p)(x);
	r=pow(z,a);
	return r;
}
int main(){
	double fun1(double n);
    double fun2(double n);
	double fun3(double n);
    double Squar(int a, double x, double(*p)(double ));
	double x;
    cout<<"Please input x:";
	cin>>x;
	cout<<"(x+1)^1=";
	cout<<Squar(1,x,fun1)<<endl;
	cout<<"(2x+3)^2=";
	cout<<Squar(2,x,fun2)<<endl;
	cout<<"(x^2+1)^3=";	
	cout<<Squar(3,x,fun3)<<endl;	
	cout<<endl;
	return 0;			
}


相關推薦

通過函式指標呼叫函式

說明: 指標可以不但可以指向一個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向一個函式。 一個函式在編譯的時候會被分配給一個入口地址。這個函式入口地址稱為函式的指標。可以用一個指標變數指向函式,然後通過該指標變數呼叫此函式。 定義指向函式的指標變數

函式指標呼叫函式

#include<iostream> using namespace std;   void site1() {      cout<<

C語言 函式指標呼叫時加星號與不加星號?

函式指標在賦值以後,例如通過庫動態載入方式,然後在使用時,程式呼叫遇到了既加星號,也有不加星號的方式,因此有點疑惑。 先上例項,再作分析 #include <stdio.h> void myfun(void); int main(void) { void (*pf)(void); p

c++中使用指標呼叫函式和使用指標呼叫類物件的()過載函式

使用函式指標時,指標可以像函式名一樣,直接加括號和引數列表呼叫;也可先解引用再呼叫 //include directories... using namespace std; void testFun() { cout<<"this is

函式指標系列:用函式指標呼叫執行函式

函式指標的定義 若在程式中定義了一個函式,在程式編譯的時候,編譯系統會給這段函式程式碼分配一段記憶體空間,這段記憶體空間的起始地址稱為這個函式的指標(函式名實質就是函式這段程式碼的起始地址)。 定義和使用指向函式的指標變數 定義指向函式的指標變數的一般

[C++]C++ 函式指標 實現 函式名字串 到 函式呼叫 cmath.h

程式碼功能 從命令列讀取格式為 函式名 數值 的輸入,例如: log10 1000 在命令列輸出呼叫對應函式名的函式計算結果,例如: log10(1000) = 3 完整原始碼 //

C++ 空指標呼叫函式 靜態繫結

首先看一段程式碼是否知道其正確還是錯誤。 class A{ public:void print(){cout << "Hello" << endl;} }; void main() {A *a = NULL;a.print(); } 問你程式是否正確

[C]通過函式指標得到函式

 出處:http://stackoverflow.com/questions/351134/how-to-get-functions-name-from-functions-pointer-in-c可以使用 backtrace(), backtrace_symbol(),根據

指標函式 AND 函式指標 AND 函式指標陣列 AND 指向函式指標陣列的指標

指標函式 形如“指標陣列”,“指標函式”是一個“函式”,函式的返回型別是指標。 定義 型別識別符號 *函式名(引數表) char *reverse(char *left, char *right); reverse是一個函式,它的返回型別是一個字元

函式指標函式指標型別

參考:https://blog.csdn.net/candyliuxj/article/details/6339414 函式指標 1.     定義 每一個函式都佔用一段記憶體單元,它們有一個起始地址,指向函式入口地址的指標稱為函式指標。

C++函式指標指標函式、返回值為函式指標函式淺談

C++函式指標、指標函式、返回值為函式指標的函式淺談 引言 函式指標、指標函式是C中重要而容易混淆的概念,博主將通過兩個例項來說明這兩個截然不同的概念。 而返回值為函式指標的指標函式就更難理解了,放在文章的最後來介紹。 函式指標 函式指標是一種特殊的 指標,它指向函式的入口。

函式(定義函式呼叫函式

一,定義函式 1.定義函式的內容 (1)指定函式的名字,以便以後按名呼叫 (2)指定函式的型別,即函式返回值的型別 (3)指定函式的引數的名字和型別,以便在呼叫函式時向它們傳遞資料。對無參函式不需要這項。 (4)指定函式的功能。在函式體中解決。 2.定義無參函式 例:void print_s

函式指標函式物件

    今天看c++中vector資料結構的底層實現,發現遍歷操作的實現之一用到了函式物件,花時間又複習了一下函式指標和函式物件。 函式指標:是指向函式的指標變數,在C編譯時,每一個函式都有一個入口地址,那麼這個指向這個函式的函式指標便指向這個地址。 函式指標的用途是很大的

函式指標函式指標陣列的學習

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //函式指標的學習 //11_4_1 //11_4-2 //void test() //{ // printf(“hehe\n”); //} //

JavaScript中的引用函式呼叫函式和回撥函式

引用函式與呼叫函式的區別 引用函式與呼叫函式的差別與函式名稱後是否附有括號()有關。函式引用只會單獨出現,但函式呼叫則必定後隨括號,很多時候還附有自變數。 舉個例子 // 函式引用 程式碼一 function f(){ var x = 5; retu

【matlab】:matlab如何寫函式並且呼叫函式

寫部落格就是為了乾貨 ——老羅如是說 matlab如何寫函式? 1,點選new M-fil

函式指標函式指標陣列的妙用

如果按照這種方法寫下去,那麼在我的每一個函式裡面,都必須作如此多的判斷,寫出的程式碼肯定很長,並且每一次處理,都要作許多次判斷之後才找到正確的處理函式,程式碼的執行效率也不高。針對上述問題,我想到了用函式指標陣列的方法解決這個問題。   函式指標的概念,在潭浩強先生的C語言程式設計這本經典的教程中提及過,在大

函式指標作為函式引數及函式作為函式引數

轉載於:http://blog.csdn.net/vlily/article/details/7244682 轉載於:http://blog.csdn.net/shengnan_wu/article/details/8116935 轉載於:http://blog.csdn.net/callm

C++ 靜態成員函式 訪問 類成員變數 & 函式指標函式指標陣列、函式指標陣列指標的使用 & 回撥函式的使用

靜態成員函式可以通過引用類物件訪問類成員變數;test.h#ifndef TEST_H #define TEST_H class Test { public: Test(); Tes

指標陣列、陣列指標函式指標函式指標陣列詳解

總結指標和陣列部分的相關知識自己寫的一遍部落格:指標是變數單元的地址,地址指向該變數單元,因此地址形象的稱為“指標”,通過指標(地址)可以找到記憶體單元。  (總結)1.指標是存放地址才出現的,地址是為