黑马程序员技术交流社区

标题: 看到一个非常厉害的关于指针的知识,拿出来跟大家分享 [打印本页]

作者: timehzy    时间: 2015-7-4 23:21
标题: 看到一个非常厉害的关于指针的知识,拿出来跟大家分享

用函数调用实现字符串的复制
  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. }
复制代码
虽然这样写法不利于阅读,但是作为一种方式,确实让人认识到指针的强大






作者: 984326157    时间: 2015-7-5 01:55
不错,学习了
作者: 周位杰    时间: 2015-7-5 08:45
腻害腻害
作者: carshoel    时间: 2015-7-5 08:56
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢
作者: peng_gavin    时间: 2015-7-5 08:56
不错的解法
作者: timehzy    时间: 2015-7-5 11:36
carshoel 发表于 2015-7-5 08:56
一步一步的简化爽啊、不过那两个➕➕是不是先做赋值,再后和前指针依次➕➕,再判断条件呢 ...

对对,*p++就是先取*p然后p++
作者: 疾风追马    时间: 2015-7-5 12:15
虽然还看不懂,但是支持一下~
作者: lixianzhu0712    时间: 2015-7-5 20:39
长知识,额
作者: 弹剑    时间: 2015-7-5 21:27
感觉到指针的厉害了...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2