欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言函數(shù)傳字符串指針,c語言的字符串指針

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

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

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!

定義指針型函數(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語句包含一個條件表達(dá)式,n值若大于7或小于1則把name[0]指針返回主函數(shù)輸出出錯提示字符串“Illegal day”。否則返回主函數(shù)輸出對應(yīng)的星期名。主函數(shù)中的第7行是個條件語句,其語義是,如輸入為負(fù)數(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ù)進(jìn)行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴(yán)重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進(jìn)行傳送。這時由實參傳向形參的只是地址,從而減少了時間和空間的開銷。

【例】計算一組學(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é)果。

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

關(guān)于C語言中指向字符串的指針問題

定義成字符數(shù)組的時候,數(shù)組名就是指向數(shù)組的首地址的指針,數(shù)組在一串連續(xù)的地址中,當(dāng)執(zhí)行復(fù)制向后移動指針的時候會依次讀取字符,沒問題,但是如果是指針,它指向的是在靜態(tài)區(qū)的一串字符串的首地址,你要把指針向后移動,他的下一個指針指向何處就是個問題了,也就是你訪問了不屬于你的內(nèi)存地址,所以出錯了!!!

C語言,字符串指針作實參傳值的問題。

使用strcpy唄,反正你用gets讀入的,最后都會有'\0'吧。

void?swap(char?*a,char?*b){

char?temp[20];

strcpy(temp,?a);

strcpy(a,?b);

strcpy(b,?temp);

}

這樣試試。

C語言 函數(shù) 指針 字符串

你這個是字符串倒序的函數(shù),start指向的是string的地址,所以當(dāng)string里面的值改變的時候,strat的值也會改變,再然后不是start前面加了最后一個字的字符,而是最后一個字符跟第一個字符互換了位置,第二個跟倒數(shù)第二個互換位置,以此類推。

C語言字符串?dāng)?shù)組指針的傳遞

簡單寫了一個,供參考

#include stdio.h

#include string.h

struct data {

int n;

char name[10];

};

//傳入一個字符串指針name,給結(jié)構(gòu)體相應(yīng)變量賦值

void cp_str( char *name , int n )

{

struct data st;

strcpy( st.name , name );

st.n=n;

}

//輸入數(shù)據(jù),完成字符串的錄入

void input_str()

{

int i=0;

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

{

scanf("%s" ,name );

cp_str( name , i );

}

}

//主程序

int main()

{

input_str();

return 0;

}

c語言字符串指針

你的說法有些混亂——C沒有字符串變量,自然不可能有字符串的指針;C中只有數(shù)組的指針和數(shù)組首指針,一維數(shù)組的首指針是指向第一個元素的指針,類型是元素的類型,操作一維數(shù)組的指針就是這個“首指針”;而數(shù)組指針是二級指針,與“首指針”有很多不同,最顯著的是首指針+1是第二個元素(下標(biāo)為1)的地址,而數(shù)組指針+1就跑到這個一維數(shù)組結(jié)束后的那個地方了(要跳過這個一維數(shù)組的所有元素)。“即指針名是指向第一個字符的地址”這個說法也不對,應(yīng)該是“指針名(嚴(yán)格應(yīng)該叫數(shù)組名)是指向第一個字符的”,或“指針名的值是第一個字符的地址”。至于為什么“能用char *s=“abc”;strlen(s)測出s的長度”,那是由于strlen這個函數(shù)從()中的指針的地址開始一個單元一個單元(因為一個字符是一個8位單元或叫空間)地向后數(shù),一直數(shù)到'\0'為止,把不計'\0'這個單元的累加值返回了,所以就得到了“字符串”的長度。這和printf("%s\n",p);能把p為首地址的“字符串”完全輸出是一樣的道理。

網(wǎng)站欄目:c語言函數(shù)傳字符串指針,c語言的字符串指針
瀏覽路徑:http://chinadenli.net/article3/dssheis.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站定制網(wǎng)站做網(wǎng)站搜索引擎優(yōu)化網(wǎng)站設(shè)計小程序開發(fā)

廣告

聲明:本網(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)

h5響應(yīng)式網(wǎng)站建設(shè)