成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語言函數(shù)指針ppt c語言函數(shù)指針賦值

c語言的函數(shù)指針舉個(gè)例子

函數(shù)指針告訴CPU下一步需要執(zhí)行哪里的代碼的指針, 一數(shù)組十分相像.

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),江北企業(yè)網(wǎng)站建設(shè),江北品牌網(wǎng)站建設(shè),網(wǎng)站定制,江北網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,江北網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

#include?stdio.h

void?function(int?i,?double?d)????//一個(gè)函數(shù)的聲明

{

printf("函數(shù)運(yùn)行,?%d,?%lf\n",?i,?d);

}

void?AnotherFunction(int?i,?double?d)????//另外一個(gè)函數(shù)聲明

{

printf("又一個(gè)函數(shù)運(yùn)行,?%d,?%lf\n",?i,?d);

}

int?main()

{

void?(*pFun)(int,?double);????//定義了一個(gè)函數(shù)指針

int?(*p)(int?,?double);????//用于調(diào)試的函數(shù)指針

pFun?=?function;????//讓這個(gè)函數(shù)指針指向第一個(gè)函數(shù)

pFun(10,?10.101);????//通過這個(gè)函數(shù)指針來調(diào)用第一個(gè)函數(shù)

pFun?=?AnotherFunction;????//讓這個(gè)函數(shù)指針指向第二個(gè)函數(shù)

pFun(20,?20.202);????//通過這個(gè)函數(shù)指針來調(diào)用第二個(gè)函數(shù)

//若將以下代碼取消注釋,?就會(huì)產(chǎn)生錯(cuò)誤

/*

p?=?function;

p?=?AnotherFunction;

//原因很簡(jiǎn)單,?因?yàn)閜是必須指向一個(gè)返回值為int,?第一個(gè)參數(shù)為int,?第二個(gè)參數(shù)為double的函數(shù),?但是在此代碼中定義的函數(shù)返回值是void

*/

//這個(gè)實(shí)驗(yàn)中,?直接用函數(shù)名來賦值了,?是因?yàn)楹瘮?shù)名其實(shí)就是這個(gè)函數(shù)的指針

//而在平常調(diào)用函數(shù)時(shí),?都要加上(),?如:printf("");

//這里,?"()"就相當(dāng)于'*'(就是取值運(yùn)算符),?printf是函數(shù)指針,?就相當(dāng)于是數(shù)組名,?即數(shù)組的首地址

return?0;

}

C語言 函數(shù)指針

加個(gè)注釋吧:

/*

函數(shù)x

參數(shù)1:?類型?int?未標(biāo)注形參

參數(shù)2:?類型?void(*)(int)?形參y

返回值:?類型?void(*)(int)

*/

void(*x(int,void(*y)(int)))(int);

其中 “void(*)(int)" 代表接收一個(gè)int參數(shù)返回類型為void的函數(shù)指針類型,比如:

void?foo(int?i)

{

printf("%d",?i);

}

所以你可以這樣調(diào)用它:

...

void?(*pf)(int);

int?i?=?0;

pf?=?x(i,?foo);

...

c語言中函數(shù)指針是什么 有什么用 舉個(gè)實(shí)例

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

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

函數(shù)指針的聲明方法為:

返回值類型 ( *?指針變量名) ([形參列表]);

如:

int func(int x); /* 聲明一個(gè)函數(shù) */

int (*f) (int x); /* 聲明一個(gè)函數(shù)指針 */

f=func; /* 將func函數(shù)的首地址賦給指針f */

或者使用下面的方法將函數(shù)地址賦給函數(shù)指針:

f = func;

賦值時(shí)函數(shù)func不帶括號(hào),也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。

下面的程序說明了函數(shù)指針調(diào)用函數(shù)的方法:

#includestdio.h

int?max(int?x,int?y){return?(xy??x:y);}

int?main()

{

int?(*ptr)(int,?int);

int?a,?b,?c;

ptr?=?max;

scanf("%d%d",?a,?b);

c?=?(*ptr)(a,b);

printf("a=%d,?b=%d,?max=%d",?a,?b,?c);

return?0;

}

C語言指針函數(shù)

char *match (char*s,char ch1,char ch2)

函數(shù)各部分的含義:

第一個(gè)char,一般是代表函數(shù)的返回值是一個(gè)字符。但是它后面有一個(gè)*,應(yīng)該把char和*連起來看,就是char*了。

那么,第一個(gè)就是char*,代表函數(shù)的返回值是一個(gè)字符指針(地址)。

match是函數(shù)的名字。

括號(hào)內(nèi)是函數(shù)的參數(shù),多個(gè)參數(shù)用逗號(hào)分隔。本例共有3個(gè)參數(shù):char*s,char ch1,char ch2,第一個(gè)是s,類型為char*型(字符指針型),后兩個(gè)ch1、ch2都是char型(字符型)。

到這兒,你就知道去掉*match前的*為什么就不對(duì)了。

另外,括號(hào)里參數(shù)類型(如包含指針)跟函數(shù)返回值的類型無關(guān)。函數(shù)名前加不加*只與函數(shù)返回值的類型有關(guān)。

C語言中函數(shù)指針用法

函數(shù)在內(nèi)存中有一個(gè)物理位置,而這個(gè)位置是可以賦給一個(gè)指針的。一零點(diǎn)函數(shù)的地址就是該函數(shù)的入口點(diǎn)。因此,函數(shù)指針可被用來調(diào)用一個(gè)函數(shù)。函數(shù)的地址是用不帶任何括號(hào)或參數(shù)的函數(shù)名來得到的。(這很類似于數(shù)組地址的得到方法,即,在只有數(shù)組名而無下標(biāo)是就得到數(shù)組地址。)

怎樣說明一個(gè)函數(shù)指針變量呢 ?

為了說明一個(gè)變量 fn_pointer 的類型是"返回值為 int 的函數(shù)指針", 你可以使用下面的說明語句:

int (*fn_pointer) ();

為了讓編譯器能正確地解釋這句語句, *fn_pointer 必須用括號(hào)圍起來。若漏了這對(duì)括號(hào), 則:

int *fn_pointer ();

的意思完全不同了。fn_pointer 將是一個(gè)函數(shù)名, 其返回值為 int 類型的指針。

2:函數(shù)指針變量

在C語言中規(guī)定,一個(gè)函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū), 而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。 我們可以把函數(shù)的這個(gè)首地址 ( 或稱入口地址 ) 賦予一個(gè)指針變量, 使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我們把這種指向函數(shù)的指針變量稱為 " 函數(shù)指針變量 " 。

函數(shù)指針變量定義的一般形式為:

類型說明符 (* 指針變量名 )();

其中 " 類型說明符 " 表示被指函數(shù)的返回值的類型。 "(* 指針變量名 )" 表示 "*" 后面的變量是定義的指針變量。 最后的空括號(hào)表示指針變量所指的是一個(gè)函數(shù)。

例如: int (*pf)();

表示 pf 是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值 ( 函數(shù)值 ) 是整型。

下面通過例子來說明用指針形式實(shí)現(xiàn)對(duì)函數(shù)調(diào)用的方法。

int max(int a,int b)

{

if(ab)return a;

else return b;

}

main()

{

int max(int a,int b);

int(*pmax)();

int x,y,z;

pmax=max;

printf("input two numbers:/n");

scanf("%d%d",x,y);

z=(*pmax)(x,y);

printf("maxmum=%d",z);

}

從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:

1. 先定義函數(shù)指針變量,如后一程序中第 9 行 int (*pmax)(); 定義 pmax 為函數(shù)指針變量。

2. 把被調(diào)函數(shù)的入口地址 ( 函數(shù)名 ) 賦予該函數(shù)指針變量,如程序中第 11 行 pmax=max;

3. 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第 14 行 z=(*pmax)(x,y); 調(diào)用函數(shù)的一般形式為: (* 指針變量名 ) ( 實(shí)參表 ) 使用函數(shù)指針變量還應(yīng)注意以下兩點(diǎn):

a. 函數(shù)指針變量不能進(jìn)行算術(shù)運(yùn)算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個(gè)整數(shù)可使指針移動(dòng)指向后面或前面的數(shù)組元素,而函數(shù)指針的移動(dòng)是毫無意義的。

b. 函數(shù)調(diào)用中 "(* 指針變量名 )" 的兩邊的括號(hào)不可少,其中的 * 不應(yīng)該理解為求值運(yùn)算,在此處它只是一種表示符號(hào)。

3:指針型函數(shù)

前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。 在C語言中允許一個(gè)函數(shù)的返回值是一個(gè)指針 ( 即地址 ) ,這種返回指針值的函數(shù)稱為指針型函數(shù)。

定義指針型函數(shù)的一般形式為:

類型說明符 * 函數(shù)名 ( 形參表 )

{

…… /* 函數(shù)體 */

}

其中函數(shù)名之前加了 "*" 號(hào)表明這是一個(gè)指針型函數(shù),即返回值是一個(gè)指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。

如:

int *ap(int x,int y)

{

…… /* 函數(shù)體 */

}

表示 ap 是一個(gè)返回指針值的指針型函數(shù), 它返回的指針指向一個(gè)整型變量。下例中定義了一個(gè)指針型函數(shù) day_name ,它的返回值指向一個(gè)字符串。該函數(shù)中定義了一個(gè)靜態(tài)指針數(shù)組 name 。 name 數(shù)組初始化賦值為八個(gè)字符串,分別表示各個(gè)星期名及出錯(cuò)提示。形參 n 表示與星期名所對(duì)應(yīng)的整數(shù)。在主函數(shù)中, 把輸入的整數(shù) i 作為實(shí)參, 在 printf 語句中調(diào)用 day_name 函數(shù)并把 i 值傳送給形參 n 。 day_name 函數(shù)中的 return 語句包含一個(gè)條件表達(dá)式, n 值若大于 7 或小于 1 則把 name[0] 指針返回主函數(shù)輸出出錯(cuò)提示字符串 "Illegal day" 。否則返回主函數(shù)輸出對(duì)應(yīng)的星期名。主函數(shù)中的第 7 行是個(gè)條件語句,其語義是,如輸入為負(fù)數(shù) (i0) 則中止程序運(yùn)行退出程序。 exit 是一個(gè)庫函數(shù), exit(1) 表示發(fā)生錯(cuò)誤后退出程序, exit(0) 表示正常退出。

應(yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如 int(*p)() 和 int *p() 是兩個(gè)完全不同的量。 int(*p)() 是一個(gè)變量說明,說明 p 是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量, (*p) 的兩邊的括號(hào)不能少。

int *p() 則不是變量說明而是函數(shù)說明,說明 p 是一個(gè)指針型函數(shù),其返回值是一個(gè)指向整型量的指針,*p 兩邊沒有括號(hào)。作為函數(shù)說明, 在括號(hào)內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。 對(duì)于指針型函數(shù)定義,int *p() 只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。

main()

{

int i;

char *day_name(int n);

printf("input Day No:/n");

scanf("%d",i);

if(i0) exit(1);

printf("Day No:%2d--%s/n",i,day_name(i));

}

char *day_n

ame(int n)

{

static char *name[]={ "Illegal day",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"};

return((n1||n7) ? name[0] : name[n]);

}

本程序是通過指針函數(shù),輸入一個(gè) 1 ~ 7 之間的整數(shù), 輸出對(duì)應(yīng)的星期名。指針數(shù)組的說明與使用一個(gè)數(shù)組的元素值為指針則是指針數(shù)組。指針數(shù)組是一組有序的指針的集合。指針數(shù)組的所有元素都必須是具有相同存儲(chǔ)類型和指向相同數(shù)據(jù)類型的指針變量。

指針數(shù)組說明的一般形式為: 類型說明符 * 數(shù)組名 [ 數(shù)組長(zhǎng)度 ]

其中類型說明符為指針值所指向的變量的類型。例如: int *pa[3] 表示 pa 是一個(gè)指針數(shù)組,它有三個(gè)數(shù)組元素, 每個(gè)元素值都是一個(gè)指針,指向整型變量。通??捎靡粋€(gè)指針數(shù)組來指向一個(gè)二維數(shù)組。 指針數(shù)組中的每個(gè)元素被賦予二維數(shù)組每一行的首地址,因此也可理解為指向一個(gè)一維數(shù)組。圖 6—6 表示了這種關(guān)系。

int a[3][3]={1,2,3,4,5,6,7,8,9};

int *pa[3]={a[0],a[1],a[2]};

int *p=a[0];

main()

{

int i;

for(i=0;i3;i++)

printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));

for(i=0;i3;i++)

printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));

}

本例程序中, pa 是一個(gè)指針數(shù)組,三個(gè)元素分別指向二維數(shù)組 a 的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 與 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值。讀者可仔細(xì)領(lǐng)會(huì)元素值的各種不同的表示方法。 應(yīng)該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。 這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的

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

/*

函數(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;

}

網(wǎng)頁題目:c語言函數(shù)指針ppt c語言函數(shù)指針賦值
URL鏈接:http://jinyejixie.com/article2/heheoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、定制網(wǎng)站、營銷型網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站制作

廣告

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

綿陽服務(wù)器托管
南京市| 巩义市| 哈密市| 密山市| 凌源市| 清远市| 仁寿县| 富蕴县| 平谷区| 二手房| 阜城县| 鄂伦春自治旗| 睢宁县| 梨树县| 通山县| 固始县| 梨树县| 乌恰县| 崇信县| 白银市| 益阳市| 本溪市| 尼玛县| 邵武市| 留坝县| 宣城市| 富民县| 苏尼特左旗| 健康| 泰州市| 博罗县| 博乐市| 湖口县| 南郑县| 石楼县| 德兴市| 平武县| 鄂温| 建瓯市| 南昌县| 栾川县|