如果我们想把一个字符串从一个函数"传递"到另一个函数,可以用地址传递的方式(即用字符数组名作参数,也可以用字符指针变量为参数)。
在被调用的函数中可以改变字符串的内容,在主函数中可以引用改变后的字符串。
下面我们用例子来说明:
例: 用函数调用实现字符串的复制
(1)用字符数组名作为函数参数
#include <stdio.h> int main(){ void copy_string(char from[],char to[]); char a[]="I am a teacher."; char b[]="You are a student."; printf("string a = %s\nstring b = %s\n",a,b); printf("copy string a to string b:\n"); copy_string(a,b); printf("string a = %s\nstring b = %s\n",a,b); return 0; } void copy_string(char from[], char to[]){ int i=0; while(from[i]!='\0'){ to[i] = from[i]; i++; } to[i]='\0'; }
(2)用字符指针变量作实参
#include <stdio.h> int main(){ void copy_string(char from[],char to[]); char a[]="I am a teacher."; char b[]="You are a student."; char * from = a,* to = b; printf("string a = %s\nstring b = %s\n",a,b); printf("copy string a to string b:\n"); copy_string(from,to); printf("string a = %s\nstring b = %s\n",a,b); return 0; } void copy_string(char from[], char to[]){ int i=0; while(from[i]!='\0'){ to[i] = from[i]; i++; } to[i]='\0'; }
由于形参数组变量名实际上也是指针变量,所以我们也是直接传数组的首地址
(3)用字符指针变量作形参和实参
#include <stdio.h> int main(){ void copy_string(char * from, char * to); char * a = "I am a teacher."; char b[] = "You are a student."; char * p = b; printf("string a = %s\nstring b = %s\n",a,b); printf("\ncopy string a to string b:\n"); copy_string(a,p); printf("string a=%s\nstring b=%s\n",a,b); return 0; } void copy_string(char * from, char * to){ for(;*from!='\0';from++,to++){ * to = * from; } * to = '\0'; }
其中字符可以用ASCII码来替换
例如("ch='a'" 可用 ''ch=97"替换)
while(ch!='a') 可用 while(ch!=97) 替换
因此, while(*from !='\0') 可以用 while(* from !=0)
'\0'的ASCII代码为0.
而关系式 * from !=0 又可以简化为 * from,这是因为若* from 得值不等于0,则表达式* from 为真
同时* from !=0 也是为真。