搞定
創(chuàng)新互聯(lián)成立于2013年,先為義縣等服務(wù)建站,義縣等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為義縣企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
額 , 現(xiàn)在可以直接用b , 因為 數(shù)組 變量b 本身是不能修改的, 而且 函數(shù)結(jié)束后 b 的生命就結(jié)束了。
所以 我在 b的前面 加了static
for(i=r;*(ch+i)!='\0';i++) //找到 目標(biāo)函數(shù)的結(jié)尾
for(j=0;j=i-r+1;j++) // i-r 是 從m到最后字符串的長度
*(b+j)=*(ch+r-1+j); //拷貝
char * x= b;
return x;
復(fù)制以下的
#includestdio.h
void main()
{
char a[20];int m=0;char*fuzhi(char*,int);
printf("輸入字符:");
gets(a);
printf("輸入起始位數(shù):");
scanf("%d",m);
printf("%s\n",fuzhi(a,m));
}
char *fuzhi(char*ch,int r)
{static char b[20];int i,j;
for(i=r;*(ch+i)!='\0';i++)
for(j=0;j=i-r+1;j++)
*(b+j)=*(ch+r-1+j);
char * x= b;
return x;
}
標(biāo)準(zhǔn)庫返回指針, 一般有三種情況
一種是 返回的指針,就是你傳入?yún)?shù)或者其中的一部分。
典型的是字符串操作函數(shù),比如 strcmp, strcpy, strstr等等。
第二種,是返回的指針,需要調(diào)用特定的函數(shù)去釋放。 比如fopen函數(shù)返回的FILE*,需要調(diào)用fclose去釋放。
第三種, 返回的指針,需要自行調(diào)用free去釋放。
比如 malloc realloc 類的申請內(nèi)存函數(shù)
以及strdup一類的復(fù)制函數(shù)。
每個標(biāo)準(zhǔn)庫函數(shù),都有自己的規(guī)范。 按照要求操作就不會內(nèi)存泄露。否則就會產(chǎn)生。
您好,很高興能為您解決問題。
一般來說是的。還有一種方法:返回數(shù)組。雖然C語言返回不能為數(shù)組,但是還是可以實現(xiàn)的:傳遞數(shù)組的指針,接收的時候再用*(返回值)就可以收到了。
希望我的解答能幫到您,望采納!
你的寫法有問題...
char ele[200];
s=ele;
ele為函數(shù)內(nèi)部定義的定長數(shù)組,等函數(shù)過程結(jié)束,對應(yīng)的內(nèi)存就會被自動釋放,所以這樣寫是不對的
加了printf也不對,只是printf可能延遲了ele的釋放
所謂函數(shù)類型是指函數(shù)返回值的類型。在C語言中允許一個函數(shù)的返回值是一個指針(即地址),這種返回指針值的函數(shù)稱為指針型函數(shù)。
定義指針型函數(shù)的一般形式為:
類型說明符 *函數(shù)名(形參表)
{
…… /*函數(shù)體*/
}
其中函數(shù)名之前加了“*”號表明這是一個指針型函數(shù),即返回值是一個指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。
如:
int *ap(int x,int y)
{
...... /*函數(shù)體*/
}
表示ap是一個返回指針值的指針型函數(shù),它返回的指針指向一個整型變量。
【例】本程序是通過指針函數(shù),輸入一個1~7之間的整數(shù),輸出對應(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]);
}
本例中定義了一個指針型函數(shù)day_name,它的返回值指向一個字符串。該函數(shù)中定義了一個靜態(tài)指針數(shù)組name。name數(shù)組初始化賦值為八個字符串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應(yīng)的整數(shù)。在主函數(shù)中,把輸入的整數(shù)i作為實參,在printf語句中調(diào)用day_name函數(shù)并把i值傳送給形參n。day_name函數(shù)中的return語句包含一個條件表達式,n值若大于7或小于1則把name[0]指針返回主函數(shù)輸出出錯提示字符串“Illegal day”。否則返回主函數(shù)輸出對應(yīng)的星期名。主函數(shù)中的第7行是個條件語句,其語義是,如輸入為負數(shù)(i0)則中止程序運行退出程序。exit是一個庫函數(shù),exit(1)表示發(fā)生錯誤后退出程序,exit(0)表示正常退出。
應(yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如int(*p)()和int *p()是兩個完全不同的量。
int (*p)()是一個變量說明,說明p是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量,(*p)的兩邊的括號不能少。
int *p()則不是變量說明而是函數(shù)說明,說明p是一個指針型函數(shù),其返回值是一個指向整型量的指針,*p兩邊沒有括號。作為函數(shù)說明,在括號內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。
對于指針型函數(shù)定義,int *p()只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。
在ANSI C標(biāo)準(zhǔn)中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴(yán)重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進行傳送。這時由實參傳向形參的只是地址,從而減少了時間和空間的開銷。
【例】計算一組學(xué)生的平均成績和不及格人數(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ù)組,因此在整個源程序中有效。在main函數(shù)中定義說明了結(jié)構(gòu)指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后以ps作實參調(diào)用函數(shù)ave。在函數(shù)ave中完成計算平均成績和統(tǒng)計不及格人數(shù)的工作并輸出結(jié)果。
由于本程序全部采用指針變量作運算和處理,故速度更快,程序效率更高。
這種方式叫做“用指針函數(shù)*creat()的返回值來傳遞動態(tài)內(nèi)存”,這是一個C語法
首先你要注意,子函數(shù)*creat()用了malloc動態(tài)申請內(nèi)存,而return返回的是指針變量所指向的地址,而不是指針!相當(dāng)于將你所申請的動態(tài)內(nèi)存返回給主函數(shù)
int
*fun(void)//這里是指針函數(shù)
{
int
*p
=
(int
*)
malloc
(int);//動態(tài)申請內(nèi)存//p在這里指向了一塊合法內(nèi)存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指針p所指向的地址,(指針p是在棧上創(chuàng)建的,所以*fun()函數(shù)運行完,指針?biāo)峙涞膬?nèi)存被系統(tǒng)自動釋放)這時q指向p,得到了malloc所申請到的內(nèi)存
free(q);//釋放動態(tài)內(nèi)存
}
標(biāo)題名稱:c語言字符串函數(shù)返回指針 c語言返回值為字符串
本文網(wǎng)址:http://jinyejixie.com/article26/dossccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、手機網(wǎng)站建設(shè)、網(wǎng)站營銷、網(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)