欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2948|回復(fù): 0
收起左側(cè)

字符串指針作函數(shù)參數(shù)

[復(fù)制鏈接]
ID:83710 發(fā)表于 2015-6-24 19:08 | 顯示全部樓層 |閱讀模式
將一個(gè)字符串從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù),可以使用傳地址的方式,即用字符數(shù)組名或字符指針變量作參數(shù)。有以下四種情況:
實(shí)參形參
1數(shù)組名數(shù)組名
2數(shù)組名字符指針變量
3字符指針變量字符指針變量
4字符指針變量數(shù)組名
[例] 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制。
(1)用字符數(shù)組作參數(shù)。
voidcopy_string(char from[], char to[])
{int i=0;
while(from != '\0')
{ to = from; i++; }
to = '\0';
}
main()
{char a[] = "I am a teacher.";
char b[] = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b);
}
main()函數(shù)可以改寫為(使用字符指針):
main()
{char *a = "I am a teacher.";
char *b = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b);
}
(2)形參用字符指針。
void(char *from, char *to)
{
for(; *form != '\0'; from++, to++)
   *to = *from;
*to = '\0';
}
main()
{char *a = "I am a teacher.";
char *b = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b);
}
(3)對(duì)copy_string函數(shù)的幾種簡(jiǎn)化
void copy_string(char *from, char *to)
{
while((*to=*from) !='\0')
   {to++; from++}
}

*to=*from是一個(gè)賦值表達(dá)式,其值等于*from。to++和from++分別使指針指向下一個(gè)字節(jié)。
先執(zhí)行賦值表達(dá)式,再判賦值表達(dá)式的值(等于*from)是否為'\0',因此,from串中的結(jié)尾字符'\0'被賦值給to。
voidcopy_string(char *from, char *to)
{
while((*to++=*from++) != '\0');
}

*to++=*from++先執(zhí)行*to=*from,再使to、from分別加1。
voidcopy_string(char *from, char *to)
{
while(*from != '\0')
*to++ = *from++;
*to = '\0';
}
當(dāng)遇到*from='\0'時(shí),不執(zhí)行賦值運(yùn)算*to++=*from++,因此,最后應(yīng)加一句*to='\0'。
voidcopy_string(char *from, char *to)
{
while(*to++=*from++);
}

與第②種簡(jiǎn)化相同,當(dāng)*from='\0'時(shí),表達(dá)式*to++=*from++的值等于'\0'(假),結(jié)束while循環(huán)。
voidcopy_string(char *from, char *to)
{
for(;(*to++ =*from++) !=0;);
for(;*to++ =*from++;);
}
⑤ for循環(huán)的結(jié)束條件是表達(dá)式*to++ =*from++的值(即*from的值)等于'\0'。且form中的'\0'已被賦給to。注意'\0'的ASCII碼是不是0。
voidcopy_string(char from[], char to[])
{char *p1, *p2;
p1 = from; p2 = to;
while((*p2++=p1++) !='\0')
}

形參用數(shù)組,使用局部指針變量指向形參數(shù)組。


(4).字符串指針作函數(shù)的參數(shù)
字符串指針作函數(shù)的參數(shù),與前面介紹的數(shù)組指針作函數(shù)參數(shù)沒有本質(zhì)的區(qū)別,函數(shù)間傳遞的都是地址值,所不同的僅是指針指向?qū)ο蟮念愋筒煌选?
例5 用字符串指針作函數(shù)參數(shù),將輸入的一個(gè)字符串復(fù)制到另一個(gè)字符串中(重點(diǎn)例題)。
#include "stdio.h"
main()
{
void copy_s(char *,char *);   
char a[20],b[30];
gets(a);                  
copy_s(a,b);               
puts(b);                  
}
void copy_s(char *str1,char *str2)
{
while((*str2=*str1)!='\0')
    {
     str1++;
     str2++;
    }
}
程序在主函數(shù)中定義了兩個(gè)字符數(shù)組a和b,a數(shù)組由gets()函數(shù)獲得,b數(shù)組通過調(diào)用copy_s()函數(shù)自動(dòng)生成。copy_s()函數(shù)有兩個(gè)指向字符串的形參,其功能是將str1指向的字符串復(fù)制到str2中。
copy_s()函數(shù)體由一個(gè)while語句構(gòu)成,其條件表達(dá)式“(*str2=* str 1)!='\0'”的計(jì)算過程是:先進(jìn)行賦值*str2=*str1,將指針str1的內(nèi)容送到指針str2指向的存儲(chǔ)位置,然后再判斷所賦值的字符是否是串結(jié)束標(biāo)記'\0'。若條件表達(dá)式成立,即當(dāng)前復(fù)制的字符不是串結(jié)束標(biāo)記,則繼續(xù)循環(huán),復(fù)制下一個(gè)字符;否則,退出循環(huán),完成串復(fù)制。
在主函數(shù)中調(diào)用copy_s()函數(shù)時(shí),必須注意兩個(gè)實(shí)參地址的順序,第一個(gè)實(shí)參是原始字符串首地址,第二個(gè)實(shí)參是目標(biāo)字符串首地址。本程序調(diào)用時(shí)使用的是存儲(chǔ)兩個(gè)字符串的字符數(shù)組名。當(dāng)然,在函數(shù)調(diào)用時(shí),也可以直接使用字符串指針變量作函數(shù)實(shí)參,如下是修改后的main()函數(shù):
main()
{
void copy_s(char *,char *);
char a[20],b[30],*pa=a,*pb=b;
gets(pa);      
copy_s(pa,pb);              
puts(pb);                  
}
事實(shí)上,這種使用字符串的方法在C語言程序中更為常用。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表