真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言函數(shù)返回字符型指針 c語(yǔ)言函數(shù)返回字符數(shù)組

c語(yǔ)言函數(shù)返回字符串時(shí)必須要用指針嗎?如果返回結(jié)構(gòu)體呢?函數(shù)在返回那些類型值時(shí)必須要用指針?

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

創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),成都小程序開(kāi)發(fā),十年建站對(duì)成都三輪攪拌車等多個(gè)行業(yè),擁有豐富建站經(jīng)驗(yàn)。

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

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

{

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

}

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

如:

int *ap(int x,int y)

{

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

}

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

【例】本程序是通過(guò)指針函數(shù),輸入一個(gè)1~7之間的整數(shù),輸出對(duì)應(yīng)的星期名。

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_name(int n){

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

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"};

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

}

本例中定義了一個(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語(yǔ)句中調(diào)用day_name函數(shù)并把i值傳送給形參n。day_name函數(shù)中的return語(yǔ)句包含一個(gè)條件表達(dá)式,n值若大于7或小于1則把name[0]指針?lè)祷刂骱瘮?shù)輸出出錯(cuò)提示字符串“Illegal day”。否則返回主函數(shù)輸出對(duì)應(yīng)的星期名。主函數(shù)中的第7行是個(gè)條件語(yǔ)句,其語(yǔ)義是,如輸入為負(fù)數(shù)(i0)則中止程序運(yùn)行退出程序。exit是一個(gè)庫(kù)函數(shù),exit(1)表示發(fā)生錯(cuò)誤后退出程序,exit(0)表示正常退出。

應(yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫(xiě)法和意義上的區(qū)別。如int(*p)()和int *p()是兩個(gè)完全不同的量。

int (*p)()是一個(gè)變量說(shuō)明,說(shuō)明p是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量,(*p)的兩邊的括號(hào)不能少。

int *p()則不是變量說(shuō)明而是函數(shù)說(shuō)明,說(shuō)明p是一個(gè)指針型函數(shù),其返回值是一個(gè)指向整型量的指針,*p兩邊沒(méi)有括號(hào)。作為函數(shù)說(shuō)明,在括號(hào)內(nèi)最好寫(xiě)入形式參數(shù),這樣便于與變量說(shuō)明區(qū)別。

對(duì)于指針型函數(shù)定義,int *p()只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。

在ANSI C標(biāo)準(zhǔn)中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行整體傳送。但是這種傳送要將全部成員逐個(gè)傳送,特別是成員為數(shù)組時(shí)將會(huì)使傳送的時(shí)間和空間開(kāi)銷很大,嚴(yán)重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進(jìn)行傳送。這時(shí)由實(shí)參傳向形參的只是地址,從而減少了時(shí)間和空間的開(kāi)銷。

【例】計(jì)算一組學(xué)生的平均成績(jī)和不及格人數(shù)。用結(jié)構(gòu)指針變量作函數(shù)參數(shù)編程。

struct stu

{

int num;

char *name;

char sex;

float score;}boy[5]={

{101,"Li ping",'M',45},

{102,"Zhang ping",'M',62.5},

{103,"He fang",'F',92.5},

{104,"Cheng ling",'F',87},

{105,"Wang ming",'M',58},

};

main()

{

struct stu *ps;

void ave(struct stu *ps);

ps=boy;

ave(ps);

}

void ave(struct stu *ps)

{

int c=0,i;

float ave,s=0;

for(i=0;i5;i++,ps++)

{

s+=ps-score;

if(ps-score60) c+=1;

}

printf("s=%f\n",s);

ave=s/5;

printf("average=%f\ncount=%d\n",ave,c);

}

本程序中定義了函數(shù)ave,其形參為結(jié)構(gòu)指針變量ps。boy被定義為外部結(jié)構(gòu)數(shù)組,因此在整個(gè)源程序中有效。在main函數(shù)中定義說(shuō)明了結(jié)構(gòu)指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后以ps作實(shí)參調(diào)用函數(shù)ave。在函數(shù)ave中完成計(jì)算平均成績(jī)和統(tǒng)計(jì)不及格人數(shù)的工作并輸出結(jié)果。

由于本程序全部采用指針變量作運(yùn)算和處理,故速度更快,程序效率更高。

C語(yǔ)言怎么設(shè)定函數(shù)返回值為char*字符串類型?

把函數(shù)的返回值的類型設(shè)置為char類型的指針就可以了。

例如:char* MultMatrix( )

實(shí)例:

#include iostream

using namespace std;

char* MultMatrix( )

{

char*M = new char[4];

M[0]='a';

M[1]='b';

M[1]='c';

M[3]='d';

M[3]='\0';//給字符串寫(xiě)結(jié)尾

cout M[0] " " M[1] endl;//輸出返回前的數(shù)組

cout M[2] " " M[3] endl;

return M;

}

int main()

{

char *M = MultMatrix();

cout M[0] " " M[1] endl;//輸出返回后數(shù)組

cout M[2] " " M[3] endl;

delete[] M;

return 0;

}

運(yùn)行結(jié)果:

a b

c d

a b

c d

一個(gè)C語(yǔ)言關(guān)于字符串操作的函數(shù),返回值為指針型字符串

你的寫(xiě)法有問(wèn)題...

char ele[200];

s=ele;

ele為函數(shù)內(nèi)部定義的定長(zhǎng)數(shù)組,等函數(shù)過(guò)程結(jié)束,對(duì)應(yīng)的內(nèi)存就會(huì)被自動(dòng)釋放,所以這樣寫(xiě)是不對(duì)的

加了printf也不對(duì),只是printf可能延遲了ele的釋放

C語(yǔ)言怎么讓一個(gè)函數(shù)返回指針

這種方式叫做“用指針函數(shù)*creat()的返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存”,這是一個(gè)C語(yǔ)法

首先你要注意,子函數(shù)*creat()用了malloc動(dòng)態(tài)申請(qǐng)內(nèi)存,而return返回的是指針變量所指向的地址,而不是指針!相當(dāng)于將你所申請(qǐng)的動(dòng)態(tài)內(nèi)存返回給主函數(shù)

int *fun(void)//這里是指針函數(shù)

{

int *p = (int *) malloc (int);//動(dòng)態(tài)申請(qǐng)內(nèi)存//p在這里指向了一塊合法內(nèi)存的地址

return p;

}

void main(void)

{

int *q = NULL;

q = fun();//fun()返回指針p所指向的地址,(指針p是在棧上創(chuàng)建的,所以*fun()函數(shù)運(yùn)行完,指針?biāo)峙涞膬?nèi)存被系統(tǒng)自動(dòng)釋放)這時(shí)q指向p,得到了malloc所申請(qǐng)到的內(nèi)存

free(q);//釋放動(dòng)態(tài)內(nèi)存

}


分享名稱:c語(yǔ)言函數(shù)返回字符型指針 c語(yǔ)言函數(shù)返回字符數(shù)組
鏈接地址:http://weahome.cn/article/dojdise.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部