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語言中friend友元函數詳細解析
友元函數是可以直接訪問類的私有成員的非成員函數。它是定義在類外的普通函數,它不屬於任何類,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關鍵字friend。我們已知道類具有封裝和信息隱藏的特性。只有類的成員函數才能訪問類的私有成員,程序中的其他...
-
C語言中的指針是什麼
C語言中的指針是什麼呢?讓本站小編告訴你吧!閲讀下面的內容你就可以知道答案哦~指針概念指針是一個變量,該變量的數值是地址,或者説,指針是一個數據對象。類似於,int類型變量的數值是整數。與指針相關的運算符間接運算符:*ptr指向bath,ptr=&bath。獲取bath中存放...
-
瞭解什麼是編程語言
學習編程語言之前,首先要搞清楚“編程語言”這個概念。下面一起來看看!很小的時候,父母就教我們開口説話,也教我們如何理解別人講話的意思。經過長時間的薰陶和自我學習,我們竟然在不知不覺中學會了説話,同時也能聽懂其他小朋友説話的意思了,我們開始向父母要零花錢...
-
c語言單引號的用法指導
C語言中用單引號引起的一個字符實際上代表一個整數,整數值對應於該字符在編譯器採用的字符集中的序列值。而一般我們的編譯器採用的都是ASCII字符集。因此's'的含義其實和十進制數115的含義是一致的。下面小編給大家整理了c語言單引號的用法,供大家參閲...