程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C函數指針簡單用例,函數指針用例

C函數指針簡單用例,函數指針用例

編輯:關於C語言

C函數指針簡單用例,函數指針用例


(1)函數指針:
可以指向 一類 固定形參類型和返回值類型 的函數 的指針
聲明:
int fun(int, int)
    ||
    \/
int (*pfun)(int, int)

pfun就是函數指針(變量)

調用:

    d = pfun(a, b);
    e = (*pfun)(a, b);

#####指針函數
int *fun(int, int);
int *(fun(int, int));
#####

 

/*ex01.c*/
#include <stdio.h>

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    int (*pfun)(int, int);
    pfun = max;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = max(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
}



(2)定義函數指針的類型 可以聲明函數指針變量
typedef int (*Pfun)(int, int);

Pfun就是自定義函數指針類型

Pfun pfun = min;

創建Pfun類型變量pfun並將min函數賦值它

 

/*ex02.c*/
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
    return 0;
}


(3)可以將函數作為參數傳入另一函數
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int dofun(Pfun pfun, int a, int b) {  //用Pfun類型的函數指針變量pfun接收傳入的函數
    return pfun(a, b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    f = dofun(min, a, b);      //將min函數作為參數傳入dofun,dofun用相應類型的函數指針接收
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    fprintf(stdout, "%d\n", e);
    return 0;
    return 0;
}


c語言的函數指針舉個例子

mxl033 回答是對的。
void* func(void)這種不是函數指針,而只是一個返回一個指針的函數。是函數,而不是指針。

typedef void (*pFunc)(); // 函數指針類型聲明,指向的是無返回無參數的函數.
typedef int (*pFunc1)(int,int); // 函數指針類型聲明,指向的是返回int型,參數有兩個int型的函數。

void func1()
{
printf("This is func1\n");
}

int add(int a, int b)
{
return a + b;

}
int main(void)
{
pFunc p = func1; // 函數指針復制
p();

// p = add; 錯誤,返回類型,和參數都不符合

pFunc1 p1 = add;

p1(1,2) // 返回3

return 0;
}

樓主可以慢慢體會,不懂再問吧
 

C語言 函數指針 的調用問題?函數指針 怎使用?最好有例子

有函數: int fun(int a,int b);
要定義指向該函數的指針
對比指向 int a; 的指針
int *p; p = &a;
p的定義是怎麼來的?
首先要保證p是一個指針類型
寫下(*p),
然後,考慮下p的基類型,
p的基類型就是變量a的類型int
將int 放在(*p)前面就行了
int (*p);
括號可以省略,就成了 int *p;

同理
想要實現 pf = &fun;
(*pf) 將pf定義為一個指針,
將fun的類型作為pf的基類型
fun相當於一個 int (int a,int b)類型的量
int (int a,int b) (*pf);
基類型中有圓括號和中括號要後移
int (*pf)(int a,int b) ;//括號不能省略
pf = &fun;
調用時
(*pf)(3,4); pf(3,4)都可以
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved