[C/C++基礎]-函數指標介紹

[C/C++基礎]-函數指標介紹

[C/C++基礎]-函數指標介紹


線上執行:

https://www.tutorialspoint.com/compile_cpp_online.php

http://codepad.org/

 

函數指標”是指向函數的指標變數,因而“函數指標”本身首先應是指標變數。

只不過該指標變數指向函數。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裏是指向函數。

如前所述,C/C++在編譯時,每一個函數都有一個進入點位址,該進入點位址就是函數指標所指向的位址。

有了指向函數的指標變數後,可用該指標變數呼叫函數,就如同用指標變數可引用其他類型變數一樣,在這些概念上一致的。

函數指標有兩個用途:呼叫函數和做函數的參數。

Code

#include <iostream>

using namespace std;
void procreation(int,void (*run)(char*,int)); /* 以函數指標為參數 */
void slow_run_shoes(char*,int);
void leisure_shoes(char*,int);
void spiked_shoes(char*,int);

int main()
{
    int procreation_number;/* 生產項目代號1~3 */
    int size;/* 尺寸 */
    procreation_number=2;
    size=8;
    switch(procreation_number)
    {
        case 1:
            procreation(size,slow_run_shoes); /* 參數列中傳入函數slow_run_shoes的位址 */
            break;
        case 2:
            procreation(size,leisure_shoes); /* 參數列中傳入函數leisure_shoes的位址 */
            break;
        case 3:
            procreation(size,spiked_shoes); /* 參數列中傳入函數spiked_shoes的位址 */
            break;
        default:
            cout <<"停止生產!!!" <<endl;
    }
    getchar();
    return 0;
}
void procreation(int size,void (*run)(char* material,int size))
{
    char* material; /* 質料名稱 */
    int material_number; /* 質料代號1~3 */
    material_number=3;
    switch(material_number)
    {
        case 1:
            material=(char*)"布";
            break;
        case 2:
            material=(char*)"獸皮";
            break;
        case 3:
            material=(char*)"塑膠";
    }
    (*run)(material,size); /* 呼叫函數指標 */
}
void slow_run_shoes(char* material,int size)
{
    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產慢跑鞋" <<endl;
}
void leisure_shoes(char* material,int size)
{
    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產休閒鞋" <<endl;
}
void spiked_shoes(char* material,int size)
{
    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產釘鞋" <<endl;
}

4 thoughts on “[C/C++基礎]-函數指標介紹

    1. c++ 警告 warning: conversion from string literal to ‘char *’ is deprecated [-Wc

      另一種解決方法 將 string 轉成(char*)
      Ex: material=(char*)”布”;

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *