c語言指針型函數(shù)怎么調(diào)用 c語言指針函數(shù)調(diào)用例子

如何調(diào)用指針函數(shù)

1.如果是返回值是指針

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計與策劃設(shè)計,廣靈網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:廣靈等地區(qū)。廣靈做網(wǎng)站價格咨詢:028-86922220

char* getname()

{

char* pname=new char[23]; //返回指針必須是函數(shù)釋放后并未釋放的內(nèi)存空間,

cout"input your name:\n"; //一般返回兩種情況,一是在函數(shù)中像該函數(shù)一樣動態(tài)分配堆內(nèi)存

cin.getline(pname,22); //二是返回指針指向參數(shù)中地址,如: int* max(int a,int b) { return a; }

pname[22]='\0';

return pname;

}

int main()

{

char* name=getname();

cout"your name is: "nameendl;

delete []name; //記得動態(tài)釋放分配內(nèi)存

return 0;

}

2.參數(shù)是指針類型

常見的是通過指針或引用交換兩個數(shù)的值

void swa(int* p1,int* p2)

{

int temp=*p1; *p1=*p2; *p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //傳遞地址

return 0;

}

附解:你可以把指針看做是一種復(fù)合類型,它之所以可以修改參數(shù)值,本質(zhì)是因為

對指針解除引用*p形式是操作的參數(shù)所存數(shù)據(jù)內(nèi)存空間,但如果它不解除引用,它

并不會修改參數(shù)的值:如

void swa(int* p1,int* p2) //函數(shù)意思是最初始在函數(shù)參數(shù)塊中定義兩個指針p1,p2,使

{ //p1指向a,p2指向b,下面函數(shù)體只是使指針指向地址改變,成了

//p1指向b,p2指向a。但并未對a,b內(nèi)存空間操作,當(dāng)函數(shù)調(diào)用結(jié)束后,指針p1,p2

//也釋放了,所以并未起任何作用

int* temp;

temp=p1; p1=p2; p2=temp;

}

int main()

{

int a=2,b=3;

swa(a,b); //傳遞地址

couta" "b;

return 0;

}

這個函數(shù)并不會交換a,b的值

在C語言中,指向函數(shù)的指針怎么調(diào)用函數(shù)?

1樓感覺對函數(shù)指針不是很了解,就不評論了. 2樓的基本還可以,但是int (*p)(),然后讓它指向max函數(shù),一個包含兩個未知量的函數(shù),這在后來的標(biāo)準(zhǔn)c里面是不支持的好像. 3樓吧,那么多*,感覺有點不大對. *是取內(nèi)容,連著那么* ,我沒試過,沒有多少意義至少.他11級了,應(yīng)該也不會怎么有錯,你可以試試(我不打算加那么多*, 就不調(diào)試了).

程序里面對函數(shù)的調(diào)用,就是通過函數(shù)的入口地址,然轉(zhuǎn)入函數(shù). 這樣的話,函數(shù)指針的意義就明顯了.函數(shù)指針指向了函數(shù)的入口,即函數(shù)指針里是函數(shù)的入口地址. 指針不能指向函數(shù)這種說法肯定是不對的.話說回來,1樓的老兄可能看錯書了,或者記錯了.

類型匹配很重要,二樓的聲明和使用不一致,這在老版的編譯器里也是支持的.那時候ANSI標(biāo)準(zhǔn)還沒有制定出來.現(xiàn)在而言,這種定義應(yīng)該不被支持了才是.

那個聲明應(yīng)該如下:

int (*p)(int , int);

這樣才能指向

int name(int,int)型的函數(shù).么有實驗過,但按這種寫法是不錯的肯定.

三樓那個********p,怎么都覺得不對.

當(dāng)一個函數(shù)的返回值為指針類型時如何調(diào)用

返回值類型為指針的函數(shù)格式:type * function(){…},其中type為某種類型(如char、int等,或類、結(jié)構(gòu)體等等),function為一個函數(shù)名。

調(diào)用方式:

type * var; //定義一個與返回值類型相同的指針變量

var = function(); //執(zhí)行函數(shù),并將返回值賦值給變量var

cout*var; //輸出指針?biāo)赶虻闹?,C語言輸出用printf()函數(shù)

或:coutvar[i]; //若指針指向數(shù)組變量的,則通過此形式輸出或調(diào)用其值

C 語言中指針函數(shù)是如何調(diào)用的??

整個程序的目的是對一組數(shù)據(jù)進行求最大值、最小值或平均值的操作,通過輸入的指令進行相應(yīng)的操作。按照不用函數(shù)指針的思路,程序大概會寫成這樣:(以下為偽代碼)

最大值函數(shù){...}

最小值函數(shù){...}

平均值函數(shù){...}

main{

輸入d,則調(diào)用 最大值函數(shù)

輸入x,則調(diào)用 最小值函數(shù)

輸入p,則調(diào)用平均值函數(shù)

}

不過可以發(fā)現(xiàn)如下幾點:

· 三個函數(shù)的參數(shù)形式與返回值都是完全一樣的

· 按上述方法寫代碼,每次調(diào)用都要寫清楚參數(shù),略顯啰嗦

所以就使用函數(shù)指針來重新改寫代碼

GetOperation這個函數(shù)本身,就是根據(jù)輸入指令找到對應(yīng)的 操作函數(shù)并作為函數(shù)指針返回它,然后main里直接通過函數(shù)指針調(diào)用,調(diào)用代碼只需要寫一次,而且甚至不用關(guān)心這個函數(shù)指針代表的到底是哪個函數(shù)

這個程序里只有三個對數(shù)據(jù)的操作所以函數(shù)指針的優(yōu)點不是很明顯。假設(shè)有多大100種對數(shù)據(jù)的操作,如果不使用函數(shù)指針,就要不停地寫if else if else if...,使用函數(shù)指針,甚至可以事先建立一個指令字符與操作函數(shù)指針的對應(yīng)列表,運行時直接在列表里搜索抽取,代碼就顯得干凈利索

GetOperation(c)(dbData,iSize)這句話的具體執(zhí)行操作是:

(下面假設(shè)輸入了c='d')

首先執(zhí)行GetOperation('d'),該函數(shù)返回得到GetMax(的指針),再執(zhí)行GetMax(bData,iSize),即對數(shù)據(jù)求最大值的操作,函數(shù)返回得到最大值

標(biāo)題名稱:c語言指針型函數(shù)怎么調(diào)用 c語言指針函數(shù)調(diào)用例子
文章轉(zhuǎn)載:http://muchs.cn/article38/ddiissp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、微信公眾號、ChatGPT、定制開發(fā)、Google、品牌網(wǎng)站設(shè)計

廣告

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

營銷型網(wǎng)站建設(shè)