雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

簡(jiǎn)要說明C語(yǔ)言中指針函數(shù)與函數(shù)指針的區(qū)別

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

指針函數(shù)一般是指返回指針的函數(shù);

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

 
函數(shù)指針是表示指向函數(shù)開始地址的指針:
首先要了解函數(shù)的調(diào)用過程:

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

函數(shù)可以用r = (*fun)(5);來調(diào)用,說明函數(shù)名其實(shí)是一個(gè)指針,
通過(*fun)來尋址。所以我們就可以定義一個(gè)指針

#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; 
} 

 
所以,給函數(shù)指針賦值也有兩種方式;
同樣,通過函數(shù)指針調(diào)用函數(shù)的方式也有兩種:

#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);   //調(diào)用 
  printf("%d\n", r); 
  return 0; 
} 

也就是說,除了聲明的地方,fun()與(*fun)()的作用是一樣的。
這樣,也就讓C語(yǔ)言容易實(shí)現(xiàn)類似于回調(diào)函數(shù)的結(jié)構(gòu):

#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);    //調(diào)用 
  return 0; 
} 

 在fun()函數(shù)里,它做的只是在某個(gè)時(shí)候調(diào)用一個(gè)funP指針指向的函數(shù),至于是哪個(gè)函數(shù),在fun函數(shù)的定義處還無從得知;直到將funA賦給函數(shù)指針funP,funP具體要做什么功能,才得以確定。
也就是說,main函數(shù)決定fun函數(shù)需要幫它實(shí)現(xiàn)什么函數(shù)代碼,但是fun何時(shí)調(diào)用以及是否調(diào)用main給他的函數(shù),那是由fun()來決定。

上一篇:在C語(yǔ)言中調(diào)用C++做的動(dòng)態(tài)鏈接庫(kù)

欄    目:C語(yǔ)言

下一篇:c++編寫簡(jiǎn)單的計(jì)算器程序

本文標(biāo)題:簡(jiǎn)要說明C語(yǔ)言中指針函數(shù)與函數(shù)指針的區(qū)別

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2337.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有