文章目录

  • 一、优化指针操作
  • 二、优化指针操作 2
  • 三、优化指针操作 3
  • 四、优化指针操作 4

一、优化指针操作


在上一篇博客 【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 ) 的基础上 , 优化指针操作 ;

重点是 *to++ = *from++; 操作 , ++ 操作的优先级高于 * 操作 ;

上述代码中 , 先进行 *to = *from; 操作 , 然后进行 to++, from++;

优化后的指针操作 :

/** 实现字符串拷贝 ( 实现了模块化 )*      将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换*/
void str_copy(char *from, char *to)
{// 如果 from 指向的字符不为 \0 , 则继续遍历// 此处无法将 \0 拷贝到 to 字符串中for(; *from != '\0'; from, to){// 拷贝字符*to++ = *from++;}// 将字符串最后一个字节拷贝过去*to = '\0';
}

二、优化指针操作 2


之前的字符串拷贝方法 , 总是需要在最后特别将 ‘\0’ 字符拷贝过去 ;

    // 将字符串最后一个字节拷贝过去*to = '\0';

使用下面的代码 , 直接在 循环条件 中进行拷贝赋值操作 , 从 from 指针指向的字符 拷贝到 to 指针指向的字符 , 如果拷贝的值不是 \0 , 则指针累加 继续拷贝 , 如果拷贝的值是 \0 , 就退出循环 ;

(*to = *from) != '\0'

但是即使退出循环 , '\0' 字符也拷贝成功了 , 这样就不需要额外拷贝 \0 字符了 ;

优化后的函数代码 :

/** 实现字符串拷贝 ( 实现了模块化 )*      将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换*/
void str_copy2(char *from, char *to)
{// 从 from 指针指向的字符 拷贝到//  to 指针指向的字符//  如果拷贝的值不是 \0 , 则指针累加//  如果拷贝的值是 \0// 这样就不需要额外拷贝 \0 字符了while((*to = *from) != '\0'){from++;to++;}
}

三、优化指针操作 3


在 一、 中 , 有如下结论 : *to++ = *from++; 操作 , ++ 操作的优先级高于 * 操作 ; 上述代码中 , 先进行 *to = *from; 操作 , 然后进行 to++, from++;

借助该结论 , 继续优化 二、 中的代码 : 可以将 函数体 中的

        from++;to++;

操作 , 移植到循环条件中执行 ;

优化后的函数代码 :

/** 实现字符串拷贝 ( 实现了模块化 )*      将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换*/
void str_copy2(char *from, char *to)
{// 从 from 指针指向的字符 拷贝到//  to 指针指向的字符//  如果拷贝的值不是 \0 , 则指针累加//  如果拷贝的值是 \0// 这样就不需要额外拷贝 \0 字符了while((*to++ = *from++) != '\0'){}
}

四、优化指针操作 4


在 三、的基础上进行优化 , (*to++ = *from++) 表达式与 0 进行比较 , 0 可以理解成 FALSE , 非 0 可以理解为 TRUE ;

  • (*to++ = *from++) 等于 0 , 该表达式值就是 FALSE ;
  • (*to++ = *from++) 不等于 0 , 该表达式值就是 TRUE ;

因此 , 这里可以直接将 (*to++ = *from++) != '\0' 表达式后面的 != '\0' 比较删除 ;

优化后的函数代码 :

/** 实现字符串拷贝 ( 实现了模块化 )*      将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换*/
void str_copy2(char *from, char *to)
{// 从 from 指针指向的字符 拷贝到//  to 指针指向的字符//  如果拷贝的值不是 \0 , 则指针累加//  如果拷贝的值是 \0// 这样就不需要额外拷贝 \0 字符了while((*to++ = *from++)){}
}

【C 语言】字符串拷贝 ( 优化指针操作 )相关推荐

  1. c语言字符串 从后拷贝,C语言字符串拷贝

    C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include char* my_strcpy1(char* dest, const char* ...

  2. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  3. C语言-字符串拷贝(2)strncpy

    C语言-字符串拷贝(2)strncpy 1. strncpy 1 定义: 2 原型: 3 功能: 4 说明: 5 缺点: 6 实现-原始版1 7 实现-原始版2 8. n 的长度大于 strlen(d ...

  4. C语言字符串相关一级指针内存模型

    C语言字符串相关一级指针内存模型 通过实例探索一级指针内存模型 通过实例探索一级指针内存模型 void main() {char buf[20]= "aaaa";char buf2 ...

  5. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )

    文章目录 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 操作字符串 2.使用 char * 指针 操作字符串 二.代码示例 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 ...

  6. java的字符串指针数组,C语言字符串中的指针与数组

    先说一下字符串字面量(字符串常量):双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串储存在内存中.字符串常量属于静态存储类别,说明如果在函数中使用字符串常量,该字符串只会储存一次,在整个程序 ...

  7. c语言 字符串和数组指针,C语言数组与指针一本道来

    数组与指针.png 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用dev-cpp或其他 指针本质上也是一个变量 指针要占用一定的内存空间(任何类型的指针的内存大小 ...

  8. c语言 字符串拷贝函数作用,C语言不使用strcpy函数如何实现字符串复制功能

    Ⅰ )字符串复制函数 字符串复制是字符串操作中比较常用的操作之一.C语言库函数中提供的字符串复制函数是:strcpy函数.该函数的功能为:把源字符数组中的字符串复制到目的字符数组中,字符串结束标志&q ...

  9. c语言字符串去重用指针,用几条shell命令快速去重10G数据

    试想一下,如果有10G数据,或者更多:怎么才能够快速地去重呢?你会说将数据导入到数据库(mysql等)进行去重,或者用java写个程序进行去重,或者用Hadoop进行处理.如果是大量的数据要写入数据库 ...

最新文章

  1. c语言 文件名变量,C语言中,如何用根据不同的变量来更改文件名?
  2. java wmi_WMI依赖服务使用WMI查询
  3. csv mysql_将csv的数据导入mysql
  4. 华为:预计6G将于2030年左右投向市场
  5. 【Elasticsearch】 Elasticsearch Suggester 自动纠错 详解
  6. “ +”(加号)CSS选择器是什么意思?
  7. python怎么读取excel-python怎么读取excel表格
  8. 维护个人品牌,放大自我价值
  9. Gym102174 (The 14-th BIT Campus Programming Contest)
  10. mixly 添加micropython_Mixly软件下载-Mixly(米思齐图形化编程工具)官方版下载v1.04 - 欧普软件园...
  11. MySQL 根据身份证查找年龄段
  12. 计算机蓝牙快捷键,电脑蓝牙在哪里开?蓝牙快捷方式介绍
  13. 戴尔DELLWIN10简体中文专业版原版光盘镜像64位
  14. 设计模式---002适配模式(转载自我的老师 Alley-巷子)
  15. 寒假集训难题(四)QWQ和神奇的传送器nefu1608
  16. 实现保留3位有效数字(四舍六入五成双规则)
  17. 快速搞定开源框架Flowable
  18. 2-1. 厘米换算英尺英寸(15)
  19. javaScript-如何引入js代码
  20. Ubuntu 14.04 LTS 的安装和配置以及各种问题的解决

热门文章

  1. [Android Pro] InputStream.skip方法的思考
  2. Shoppica OpenCart 商城自适应主题模板 ABC-0002
  3. 关于加载django模块时的错误:no module named django.conf.urls.defaults
  4. PyQt - 维基百科,自由的百科全书
  5. Cisco和H3C的两种不同动态***解决方案
  6. [翻译]一步步教你配置SQL SERVER合并复制(四)提高Distributor的安全性
  7. json与javabean、list、map之间的转化
  8. Felx布局基础教程
  9. jquery 属性操作
  10. python---django中orm的使用(5)数据库的基本操作(性能相关:select_related,和prefetch_related重点)(以及事务操作)...