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;
}
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語言中,字符串是以字符數組的方式存儲的,而數組的本質就是指針;
因此,傳進去一個字符串,就是把它的地址傳去了。
可以的,就像以下代碼:
void?show(char?*str)
{
printf("%s\n",?str);
}
你在調用的時候,一般是傳一個變量進去,同樣也可以傳一個字符串常量進去,
例如show("Hello?World");
為什么可以呢?首先要想,什么是變量,變量代表著值不確定,是動態的。
而當一個變量有值的時候,除非它發生改變,否則它就是"確定"的。
既然一個不確定的東西能作為參數傳遞過去,那么一個確定的字符串有何理由不能傳遞呢?
#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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯