c語言指針函數(shù)怎么用 c語言指針函數(shù)怎么用的

C語言-函數(shù)指針

/*

為富蘊(yùn)等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及富蘊(yùn)網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、富蘊(yùn)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

函數(shù)指針,關(guān)鍵是后面兩個(gè)字“指針”,顧名思義,是一個(gè)指向函數(shù)的指針

原理:函數(shù)在創(chuàng)建好了后,函數(shù)的代碼會(huì)在內(nèi)存中占有個(gè)位置,這時(shí)我們創(chuàng)造一個(gè)指針來指向這個(gè)地址,這個(gè)指針就叫函數(shù)指針

函數(shù)指針不可以移動(dòng),想要移動(dòng)指針的位置來指向函數(shù)的下一個(gè)指令的想法是錯(cuò)誤的

函數(shù)指針的要求,

1,首先這個(gè)指針,要和函數(shù)的返回類型一樣

2,指針的*和名字,要用小括號(hào)括起來//不括起來就是指針函數(shù)了,意思就變成,函數(shù)返回一個(gè)指針了

3,最右邊的小括號(hào)里形參位置的類型,形參的個(gè)數(shù),也要和函數(shù)定義時(shí)的形參一致,只要類型,不要形參名即可,

但是加上形參名也可以,沒毛病,看上去也更清晰

*/

#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);//定義函數(shù)指針、形參名字a、b可有可無,但有的話看上去更清晰,只要函數(shù)定義的類型、參數(shù)類型、以及參數(shù)個(gè)數(shù),與這個(gè)指針一致,那么這個(gè)指針p,就可以指向它

p = swapchar;//p指針接管swapchar函數(shù),只要給函數(shù)名字,就可以給過去了

printf("chf=%c,chg=%c ", chf, chg);

p(chf, chg);

printf("chf=%c,chg=%c ", chf, chg);

p = swapchar2;//這里把swapchar2函數(shù)的地址,給了p,這時(shí)p從swapchar地址,轉(zhuǎn)移到了swapchar2這里。

p(chf,chg);

return 0;

}

c語言函數(shù)指針的作用。

C語言中函數(shù)指針與普通指針沒什么差別,只是指向的內(nèi)容不同而已。主要作用:

1、實(shí)現(xiàn)面向?qū)ο缶幊讨械亩鄳B(tài)性。

2、回調(diào)函數(shù)。

函數(shù)指針是指向函數(shù)的指針變量。因此“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。

C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂贰S辛酥赶蚝瘮?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上是大體一致的。

函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。

c語言中指針怎么使用?

1、使用場景

使用指針時(shí),必須將它指向一個(gè)變量的地址或者為它分配空間方能使用,如下所示:

#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數(shù)組首地址

//*b=2;? ?無法直接初始化

//printf("%d\n", *b);

e=e+2;? //移動(dòng)兩個(gè)地址單元

d=c;? //d指向c的地址來表示值

c=4;? ?//修改原c變量的值,d指針的值會(huì)發(fā)生改變

b=(int *)malloc(sizeof(int));//為b分配一個(gè)int型空間來直接存儲(chǔ)值

*b=2;//分配空間后可以直接賦值了

printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);

2、類型說明

(1)int *a :表示一個(gè)指向int型變量的指針,指向的是變量的地址單元

(2)char *b:表示一個(gè)指向char變量的指針

*a表示的是這個(gè)指針指向地址的值,a為此指針本身的地址,這點(diǎn)要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p\n",*a,*(a+1),a);

擴(kuò)展資料:

指針的運(yùn)算

指針指向變量地址,若原變量的內(nèi)容發(fā)生了變化,它本身也會(huì)發(fā)生變化,指針之間的運(yùn)算一般為值運(yùn)算和地址運(yùn)算

(1)值運(yùn)算:直接通過*運(yùn)算方式,像a+*(a+1),結(jié)果為第一個(gè)元素與第二個(gè)元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址運(yùn)算:通過a+i的方式.指針會(huì)指向a的下i個(gè)地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d\n",*a);

結(jié)果輸出2。

參考資料來源 :指針-百度百科

當(dāng)前標(biāo)題:c語言指針函數(shù)怎么用 c語言指針函數(shù)怎么用的
分享路徑:http://muchs.cn/article32/ddigisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷用戶體驗(yàn)、App開發(fā)、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名