程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 扼要解釋C說話中指針函數與函數指針的差別

扼要解釋C說話中指針函數與函數指針的差別

編輯:關於C++

扼要解釋C說話中指針函數與函數指針的差別。本站提示廣大學習愛好者:(扼要解釋C說話中指針函數與函數指針的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是扼要解釋C說話中指針函數與函數指針的差別正文


指針函數普通是指前往指針的函數;

#include <stdio.h> 
 
int* fun(int *a) 
{ 
  return a; 
} 
 
int main(int argc, char **argv) 
{ 
  int a = 3; 
  printf("%d", *(fun(&a))); 
  return 0; 
} 

 
函數指針是表現指向函數開端地址的指針:
起首要懂得函數的挪用進程:

#include <stdio.h> 
 
int fun(int i) 
{ 
  return i + 1; 
} 
 
int main(int argc, char **argv) 
{ 
  int r; 
  //r = fun(5); 
  r = (*fun)(5);   //挪用方法 
  printf("%d\n", r); 
  return 0; 
} 

函數可以用r = (*fun)(5);來挪用,解釋函數名實際上是一個指針,
經由過程(*fun)來尋址。所以我們便可以界說一個指針

#include <stdio.h> 
 
int fun(int i) 
{ 
  return i + 1; 
} 
 
int main(int argc, char **argv) 
{ 
  int r; 
  int (*funP)(int);  //聲明指針 
  //funP = fun;    //給指針賦值 
  funP = &fun; 
  r = funP(5); 
  printf("%d\n", r); 
  return 0; 
} 

 
所以,給函數指針賦值也有兩種方法;
異樣,經由過程函數指針挪用函數的方法也有兩種:

#include <stdio.h> 
 
int fun(int i) 
{ 
  return i + 1; 
} 
 
int main(int argc, char **argv) 
{ 
  int r; 
  int (*funP)(int);  //聲明指針 
  funP = fun;   //給指針賦值 
  //r = funP(5); 
  r = (*funP)(5);   //挪用 
  printf("%d\n", r); 
  return 0; 
} 

也就是說,除聲明的處所,fun()與(*fun)()的感化是一樣的。
如許,也就讓C說話輕易完成相似於回調函數的構造:

#include <stdio.h> 
 
int funA(int i) 
{ 
  return i + 1; 
} 
 
int funB(int i) 
{ 
  return i - 1; 
} 
 
void fun(int (*funP)(int), int i) 
{ 
  printf("%d\n", funP(i)); 
} 
 
int main(int argc, char **argv) 
{ 
  int (*funP)(int);  //聲明指針 
  funP = funA;    //給指針賦值 
  //funP = funB;   //給指針賦值 
 
  fun(funP, 5);    //挪用 
  return 0; 
} 

 在fun()函數裡,它做的只是在某個時刻挪用一個funP指針指向的函數,至因而哪一個函數,在fun函數的界說處還無從得知;直到將funA賦給函數指針funP,funP詳細要做甚麼功效,才得以肯定。
也就是說,main函數決議fun函數須要幫它完成甚麼函數代碼,然則fun什麼時候挪用和能否挪用main給他的函數,那是由fun()來決議。

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