/*
為富蘊等地區用戶提供了全套網頁設計制作服務,及富蘊網站建設行業解決方案。主營業務為網站建設、網站制作、富蘊網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
函數指針,關鍵是后面兩個字“指針”,顧名思義,是一個指向函數的指針
原理:函數在創建好了后,函數的代碼會在內存中占有個位置,這時我們創造一個指針來指向這個地址,這個指針就叫函數指針
函數指針不可以移動,想要移動指針的位置來指向函數的下一個指令的想法是錯誤的
函數指針的要求,
1,首先這個指針,要和函數的返回類型一樣
2,指針的*和名字,要用小括號括起來//不括起來就是指針函數了,意思就變成,函數返回一個指針了
3,最右邊的小括號里形參位置的類型,形參的個數,也要和函數定義時的形參一致,只要類型,不要形參名即可,
但是加上形參名也可以,沒毛病,看上去也更清晰
*/
#include
void swapchar(char *a, char *b)
{
char t;
t = *a;
*a = *b;
*b = t;
}
void swapchar2(char * a2, char * b2)
{
printf("this is swapchar2");
}
int main(void)
{
char chf = 'a', chg = 'j';
void(*p)(char * a, char * b);//定義函數指針、形參名字a、b可有可無,但有的話看上去更清晰,只要函數定義的類型、參數類型、以及參數個數,與這個指針一致,那么這個指針p,就可以指向它
p = swapchar;//p指針接管swapchar函數,只要給函數名字,就可以給過去了
printf("chf=%c,chg=%c ", chf, chg);
p(chf, chg);
printf("chf=%c,chg=%c ", chf, chg);
p = swapchar2;//這里把swapchar2函數的地址,給了p,這時p從swapchar地址,轉移到了swapchar2這里。
p(chf,chg);
return 0;
}
C語言中函數指針與普通指針沒什么差別,只是指向的內容不同而已。主要作用:
1、實現面向對象編程中的多態性。
2、回調函數。
函數指針是指向函數的指針變量。因此“函數指針”本身首先應是指針變量,只不過該指針變量指向函數。這正如用指針變量可指向整型變量、字符型、數組一樣,這里是指向函數。
C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量后,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量一樣,在這些概念上是大體一致的。
函數指針有兩個用途:調用函數和做函數的參數。
1、使用場景
使用指針時,必須將它指向一個變量的地址或者為它分配空間方能使用,如下所示:
#includestdio.h
#include stdlib.h
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a數組首地址
//*b=2;? ?無法直接初始化
//printf("%d\n", *b);
e=e+2;? //移動兩個地址單元
d=c;? //d指向c的地址來表示值
c=4;? ?//修改原c變量的值,d指針的值會發生改變
b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲值
*b=2;//分配空間后可以直接賦值了
printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);
2、類型說明
(1)int *a :表示一個指向int型變量的指針,指向的是變量的地址單元
(2)char *b:表示一個指向char變量的指針
*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p\n",*a,*(a+1),a);
擴展資料:
指針的運算
指針指向變量地址,若原變量的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d\n",*a);
結果輸出2。
參考資料來源 :指針-百度百科
當前標題:c語言指針函數怎么用 c語言指針函數怎么用的
分享路徑:http://vcdvsql.cn/article32/ddigisc.html
成都網站建設公司_創新互聯,為您提供網站營銷、用戶體驗、App開發、品牌網站設計、品牌網站建設、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯