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的值
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,怎么都覺得不對.
返回值類型為指針的函數(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)用其值
整個程序的目的是對一組數(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ù)返回得到最大值