字符串指针作函数参数zz
(2009-01-08 12:23:44)
标签:
it |
将一个字符串从一个函数传递到另一个函数,可以使用传地址的方式,即用字符数组名或字符指针变量作参数。有以下四种情况:
实参 形参 1 数组名 数组名 2 数组名 字符指针变量 3 字符指针变量 字符指针变量 4 字符指针变量 数组名
[例] 用函数调用实现字符串的复制。
(1)用字符数组作参数。
void copy_string(char from[], char to[]) { int i=0; while(from[i] != '\0') { to[i] = from[i]; i++; } to[i] = '\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()函数可以改写为(使用字符指针):
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)对copy_string函数的几种简化
|
① *to=*from是一个赋值表达式,其值等于*from。to++和from++分别使指针指向下一个字节。 先执行赋值表达式,再判赋值表达式的值(等于*from)是否为'\0',因此,from串中的结尾字符'\0'被赋值给to。 |
||||||||||||
|
② *to++=*from++先执行*to=*from,再使to、from分别加1。 |
||||||||||||
|
③
当遇到*from='\0'时,不执行赋值运算*to++=*from++,因此,最后应加一句*to='\0'。 |
||||||||||||
|
④ 与第②种简化相同,当*from='\0'时,表达式*to++=*from++的值等于'\0'(假),结束while循环。 |
||||||||||||
|
⑤ for循环的结束条件是表达式*to++ =*from++的值(即*from的值)等于'\0'。且form中的'\0'已被赋给to。注意'\0'的ASCII码是不是0。 |
||||||||||||
|
⑥ 形参用数组,使用局部指针变量指向形参数组。 |
(4).字符串指针作函数的参数
字符串指针作函数的参数,与前面介绍的数组指针作函数参数没有本质的区别,函数间传递的都是地址值,所不同的仅是指针指向对象的类型不同而已。
例5 用字符串指针作函数参数,将输入的一个字符串复制到另一个字符串中(重点例题)。
#include "stdio.h"
main()
{
}
void copy_s(char *str1,char *str2)
{
}
程序在主函数中定义了两个字符数组a和b,a数组由gets()函数获得,b数组通过调用copy_s()函数自动生成。copy_s()函数有两个指向字符串的形参,其功能是将str1指向的字符串复制到str2中。
copy_s()函数体由一个while语句构成,其条件表达式“(*str2=* str 1)!='\0'”的计算过程是:先进行赋值*str2=*str1,将指针str1的内容送到指针str2指向的存储位置,然后再判断所赋值的字符是否是串结束标记'\0'。若条件表达式成立,即当前复制的字符不是串结束标记,则继续循环,复制下一个字符;否则,退出循环,完成串复制。
在主函数中调用copy_s()函数时,必须注意两个实参地址的顺序,第一个实参是原始字符串首地址,第二个实参是目标字符串首地址。本程序调用时使用的是存储两个字符串的字符数组名。当然,在函数调用时,也可以直接使用字符串指针变量作函数实参,如下是修改后的main()函数:
main()
{
}
事实上,这种使用字符串的方法在C语言程序中更为常用。