指针-字符指针作函数参数

如果我们想把一个字符串从一个函数"传递"到另一个函数,可以用地址传递的方式(即用字符数组名作参数,也可以用字符指针变量为参数)。


在被调用的函数中可以改变字符串的内容,在主函数中可以引用改变后的字符串。


下面我们用例子来说明:


例:  用函数调用实现字符串的复制


(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 也是为真。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值