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 ", 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 ", 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 ", 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 ", 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()來決定。
相關文章
-
C語言指針函數和函數指針詳解
一、近期目標今年是在新的工作崗位工作的第一年,是熟悉工作,積極參與,認真履職,探索方法,積累經驗的一年,這一年中必須做到“一個轉變,一個明確”,即轉變工作角色,明確工作職責。轉變工作角色:參加工作近十年了,但是自己從事的工 -
C語言函數指針與回調函數詳解
C 語言是一種通用的、面向過程式的計算機程序設計語言。1972 年,爲了移植與開發 UNIX 操作系統,丹尼斯·裏奇在貝爾電話實驗室設計開發了 C 語言。下面小編給大家介紹C語言函數指針與回調函數,歡迎閱讀! C語言函數指 -
c語言知識:數組指針和指針數組的區別
指針數組和數組指針,這兩個名字不同當然所代表的意思也就不同,下面是其區別,歡迎閱讀:指針數組:array of pointers,即用於存儲指針的數組,也就是數組元素都是指針數組指針:a pointer to an array,即指向數組的指針還要注意的是 -
C語言中指針與數組的區別
通俗理解數組指針和指針數組,C語言中指針與數組有什麼區別呢?應該怎麼去區分?下面是小編爲大家整理的C語言中指針與數組的區別,歡迎參考~通俗理解數組指針和指針數組 數組指針:eg:int( *arr)[10];數組指針通俗理解就是 -
C語言中指針與數組的詳解及區別
本文是本站小編整理的關於C語言重指針與數組的詳解及對比的相關資料,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網! C語言 指針與數組的詳解及對比通俗理解數組指針和指針數組 -
C語言中指針變量作爲函數參數詳解
在C語言中,函數的參數不僅可以是整數、小數、字符等具體的數據,還可以是指向它們的指針。用指針變量作函數參數可以將函數外部的地址傳遞到函數內部,使得在函數內部可以操作函數外部的數據,並且這些數據不會隨着函數的結 -
C語言結構體中的函數指針
C語言結構體中的函數指針內容由小編收集整理,希望對您的 學習有所幫助!更多內容請關注應屆畢業生考試網!結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。所以,標準C中的結構體是不允許包含成員函數的,當然C -
C語言函數指針變量
導語:在C語言中規定,一個函數總是佔用一段連續的內存區, 而函數名就是該函數所佔內存區的首地址。 這就是函數指針變量。下面是相關介紹,僅供參考!在C語言中規定,一個函數總是佔用一段連續的內存區, 而函數名就是該函數所佔 -
C語言的指針型函數
導語:所謂函數類型是指函數返回值的類型。 在C語言中允許一個函數的返回值是一個指針(即地址), 這種返回指針值的函數稱爲指針型函數。讓我們一起了解一下這種函數吧!定義指針型函數的一般形式爲:類型說明符 *函數名(形參 -
c++函數指針使用示例
設計一個名爲estimate()的函數,估算編寫指定行數的代碼所需的時間,並且希望不同的程序員都可以使用該函數。以下是爲大家分享的c++函數指針使用示例,供大家參考借鑑,歡迎瀏覽! 需求假設要設計一個名爲estimate()的函數,估算