A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


用函数调用实现字符串的复制
  1. #include <stdio.h>

  2. void copy_string(char *to,char *from){
  3.     while (*from!= '\0') {
  4.         *to = *from;
  5.         from++;
  6.         to++;
  7.     }
  8.     *to = '\0';
  9. }

  10. int main(int argc, const char * argv[]) {
  11.     char a[] = "hello",b[10];
  12.     copy_string(b,a);
  13.     printf("%s",b);
  14.     return 0;
  15. }
复制代码
然后这个copy_string函数可以简化成下面这个样子
  1. void copy_string(char *to,char *from){
  2.     while ((*to = *from)!= '\0') {//在while循环判断的时候完成调换
  3.         from++;
  4.         to++;
  5.     }
  6. }
复制代码
然后还可以继续简化
  1. void copy_string(char *to,char *from){
  2.     while ((*to++ = *from++)!= '\0');//在循环条件判断的时候完成调换和指针的移动
  3. }
复制代码
因为'\0'的ASCII码为0,所以可以继续简化为
  1. void copy_string(char *to,char *from){
  2.     while ((*to++ = *from++)!= 0);
  3. }
复制代码
而关系表达式(*to++ = *from++)!= 0又可以看作是真假的判断因此可以再简化
  1. void copy_string(char *to,char *from){
  2.     while ((*to++ = *from++));
  3. }
复制代码
虽然这样写法不利于阅读,但是作为一种方式,确实让人认识到指针的强大





8 个回复

倒序浏览
不错,学习了
回复 使用道具 举报
周位杰 来自手机 中级黑马 2015-7-5 08:45:54
藤椅
腻害腻害
回复 使用道具 举报
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢
回复 使用道具 举报
不错的解法
回复 使用道具 举报
carshoel 发表于 2015-7-5 08:56
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢 ...

对对,*p++就是先取*p然后p++
回复 使用道具 举报
虽然还看不懂,但是支持一下~
回复 使用道具 举报
长知识,额
回复 使用道具 举报
感觉到指针的厉害了...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马