c語言函數參數為字符串 c語言字符串形參

c語言如何傳遞字符串?

c語言函數中傳遞字符串,可以分為兩種情況,一種是將字符串作為參數,一種是將字符串作為返回值

烏蘭察布網站制作公司哪家好,找創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、響應式網站開發等網站項目制作,到程序開發,運營維護。創新互聯公司自2013年起到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯公司

,當使用字符串作為返回值時,切記不要傳遞局部字符數組。下面是一個示例代碼:

#include

#include

#include

void f(char *str) { //字符串作參數

printf(str);

}

char * r() { //字符串作返回值

//使用動態分配內存,不要使用局部變量比如

//char buf[80]; 因為局部變量在函數結束時,棧區變量已被回收

char *str = (char *)malloc(256 * sizeof(char));

if (str==0) { printf("can't alloc mem\n"); return 0;}

else memset(str, 0x00 ,sizeof(char) * 256);

return str; //

}

int main()

{

char *pstr = r();

if (pstr!=0) strcpy(pstr, "hello world\n");

f(pstr);

free(pstr);

return 0;

}

c語言:字符串做為函數參數傳遞

1、值傳遞

void swap(int x,int y)

{ ? ?int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

}

執行后,并不會交換。

2、引用傳遞

void swap(int x,int y)

{ ? ?int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d\nb=%d\n", a, b);

}

執行后,發生交換。

3、指針傳遞

void swap(int *x,int *y)

{ ? ?int temp = *x; ? ?*x = *y; ? ?*y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d\nb=%d\n", a, b);

}

執行后,發生交換。

參數傳遞只有上面三種,但是如果加上數組,就會產生幾種新形式。

首先,明確數組型變量名本身只是該數組所占存儲空間的首地址:

int a[3] = { 1, 2, 3 }; ? ?int *p = a; //等價于下行 ? ?//int *p = a[0];

printf("%d", *p);?

典型的數組做參數。

void fun(char s[]){ ? ?for (int i = 0; s[i] != '\0'; i++)

printf("%c", s[i]);

}void main()

{ ? ?char str[] = "Hello World!";

fun(str);

}

函數調用時,這里系統不會為形參分配數組存儲空間,而是僅僅分配一個存放數組地址(第一個元素地址)的存儲空間,此后,將實參數組的首地址傳遞給形參變量。

其實本質與下相同,只不過還是數組形式的(數組名代替指針)。

既然數組型變量名本身只是該數組所占存儲空間的首地址,我們當然可以用指針做形參來接收數組實參。

void fun(char *p){ ? ?while (*p)

{

printf("%c", *p);

p++;

}?

}void main()

{ ? ?char str[] = "Hello World!";

fun(str);

}

不過問題是如果這樣,無法把握數組結束(除非知道數組長度)。而對于字符數組(上例),由于字符串末尾有結束標志'\0'(ascii碼正好是0),所以就很容易利用指針來判斷字符串是否結束。

擴展資料:

調用帶參數的函數:

在調用函數時,可以向其傳遞值,這些值被稱為參數。

這些參數可以在函數中使用。

可以發送任意多的參數,由逗號 (,) 分隔:

myFunction(argument1,argument2)。

當聲明函數時,請把參數作為變量來聲明:

function myFunction(var1,var2){這里是要執行的代碼}。

變量和參數必須以一致的順序出現。第一個變量就是第一個被傳遞的參數的給定的值,以此類推。

按值傳遞參數:

按值傳遞參數時,是將實參變量的值復制一個到臨時存儲單元中,如果在調用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調用前的值不變。

按值傳遞參數時,需要在參數名前加"ByVal"關鍵字。

按地址傳遞參數:

按地址傳遞參數時,把實參變量的地址傳送給被調用過程,形參和實參共用內存的同一地址。在被調用過程中,形參的值一旦改變,相應實參的值也跟著改變。

如果實參是一個常數或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關鍵字。

按數組傳遞參數:

在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須采用地址傳遞的方式來傳遞參數。數組參數在傳遞時應注意以下兩個方面:

① 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括號不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔。

② 被調過程可分別通過Lbound和Ubound函數確定實參數組的下界和上界。

參考資料來源:百度百科-參數傳遞

參考資料來源:百度百科-字符串

C語言調用函數時,參數傳的是字符串,并沒有傳字符串指針,為什么主函數中的值還是會變化?

在c語言中,字符串是以字符數組的方式存儲的,而數組的本質就是指針;

因此,傳進去一個字符串,就是把它的地址傳去了。

c語言中雙引號引起來的字符串可以作為函數參數嗎

可以的,就像以下代碼:

void?show(char?*str)

{

printf("%s\n",?str);

}

你在調用的時候,一般是傳一個變量進去,同樣也可以傳一個字符串常量進去,

例如show("Hello?World");

為什么可以呢?首先要想,什么是變量,變量代表著值不確定,是動態的。

而當一個變量有值的時候,除非它發生改變,否則它就是"確定"的。

既然一個不確定的東西能作為參數傳遞過去,那么一個確定的字符串有何理由不能傳遞呢?

c語言設計一函數函數形參為一字符串,判斷是否為字符串"Hello"?

#include string.h

#include stdbool.h

bool func (const char *str){

return strncmp (str, "Hello", 5) == 0;

}

網站名稱:c語言函數參數為字符串 c語言字符串形參
當前鏈接:http://m.kartarina.com/article42/hgeshc.html

成都網站建設公司_創新互聯,為您提供域名注冊網站營銷做網站品牌網站建設網站收錄定制網站

廣告

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

網站優化排名
主站蜘蛛池模板: 伊人久久大香线蕉无码| 人妻无码久久一区二区三区免费| 亚洲AV日韩AV永久无码绿巨人| 亚洲av日韩av无码| 亚洲精品无码日韩国产不卡av| 精品久久久久久无码人妻蜜桃| 精品无码久久久久国产| 成在线人免费无码高潮喷水| 亚洲熟妇无码一区二区三区| 中文字幕有码无码AV| av色欲无码人妻中文字幕| 日韩精品无码免费一区二区三区| 亚洲免费日韩无码系列| 亚洲精品无码你懂的| 日韩精品真人荷官无码| 国产成人无码一二三区视频| 亚洲αⅴ无码乱码在线观看性色| 亚洲精品无码永久中文字幕| 亚洲av无码天堂一区二区三区| 亚洲AV无码专区在线亚| 日韩av无码一区二区三区| 免费看成人AA片无码视频吃奶| 免费无码AV一区二区| 亚洲国产精品无码中文lv| 精品无码久久久久久午夜| 日韩AV无码精品人妻系列| yy111111电影院少妇影院无码| 无码A级毛片日韩精品| 亚洲AV无码国产一区二区三区| 亚洲午夜成人精品无码色欲| 日韩精品无码AV成人观看| 无码AV天堂一区二区三区| 亚洲自偷自偷偷色无码中文| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲AV日韩AV高潮无码专区| 一本一道AV无码中文字幕| 日韩精品无码免费专区午夜不卡 | 91嫩草国产在线无码观看| 无码日韩精品一区二区三区免费| 国产精品VA在线观看无码不卡| 久久久精品无码专区不卡|