【C 语言】字符串拷贝 ( 优化指针操作 )
文章目录
- 一、优化指针操作
- 二、优化指针操作 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 语言】字符串拷贝 ( 优化指针操作 )相关推荐
- c语言字符串 从后拷贝,C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include char* my_strcpy1(char* dest, const char* ...
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...
- C语言-字符串拷贝(2)strncpy
C语言-字符串拷贝(2)strncpy 1. strncpy 1 定义: 2 原型: 3 功能: 4 说明: 5 缺点: 6 实现-原始版1 7 实现-原始版2 8. n 的长度大于 strlen(d ...
- C语言字符串相关一级指针内存模型
C语言字符串相关一级指针内存模型 通过实例探索一级指针内存模型 通过实例探索一级指针内存模型 void main() {char buf[20]= "aaaa";char buf2 ...
- 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )
文章目录 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 操作字符串 2.使用 char * 指针 操作字符串 二.代码示例 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 ...
- java的字符串指针数组,C语言字符串中的指针与数组
先说一下字符串字面量(字符串常量):双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串储存在内存中.字符串常量属于静态存储类别,说明如果在函数中使用字符串常量,该字符串只会储存一次,在整个程序 ...
- c语言 字符串和数组指针,C语言数组与指针一本道来
数组与指针.png 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用dev-cpp或其他 指针本质上也是一个变量 指针要占用一定的内存空间(任何类型的指针的内存大小 ...
- c语言 字符串拷贝函数作用,C语言不使用strcpy函数如何实现字符串复制功能
Ⅰ )字符串复制函数 字符串复制是字符串操作中比较常用的操作之一.C语言库函数中提供的字符串复制函数是:strcpy函数.该函数的功能为:把源字符数组中的字符串复制到目的字符数组中,字符串结束标志&q ...
- c语言字符串去重用指针,用几条shell命令快速去重10G数据
试想一下,如果有10G数据,或者更多:怎么才能够快速地去重呢?你会说将数据导入到数据库(mysql等)进行去重,或者用java写个程序进行去重,或者用Hadoop进行处理.如果是大量的数据要写入数据库 ...
最新文章
- c语言 文件名变量,C语言中,如何用根据不同的变量来更改文件名?
- java wmi_WMI依赖服务使用WMI查询
- csv mysql_将csv的数据导入mysql
- 华为:预计6G将于2030年左右投向市场
- 【Elasticsearch】 Elasticsearch Suggester 自动纠错 详解
- “ +”(加号)CSS选择器是什么意思?
- python怎么读取excel-python怎么读取excel表格
- 维护个人品牌,放大自我价值
- Gym102174 (The 14-th BIT Campus Programming Contest)
- mixly 添加micropython_Mixly软件下载-Mixly(米思齐图形化编程工具)官方版下载v1.04 - 欧普软件园...
- MySQL 根据身份证查找年龄段
- 计算机蓝牙快捷键,电脑蓝牙在哪里开?蓝牙快捷方式介绍
- 戴尔DELLWIN10简体中文专业版原版光盘镜像64位
- 设计模式---002适配模式(转载自我的老师 Alley-巷子)
- 寒假集训难题(四)QWQ和神奇的传送器nefu1608
- 实现保留3位有效数字(四舍六入五成双规则)
- 快速搞定开源框架Flowable
- 2-1. 厘米换算英尺英寸(15)
- javaScript-如何引入js代码
- Ubuntu 14.04 LTS 的安装和配置以及各种问题的解决
热门文章
- [Android Pro] InputStream.skip方法的思考
- Shoppica OpenCart 商城自适应主题模板 ABC-0002
- 关于加载django模块时的错误:no module named django.conf.urls.defaults
- PyQt - 维基百科,自由的百科全书
- Cisco和H3C的两种不同动态***解决方案
- [翻译]一步步教你配置SQL SERVER合并复制(四)提高Distributor的安全性
- json与javabean、list、map之间的转化
- Felx布局基础教程
- jquery 属性操作
- python---django中orm的使用(5)数据库的基本操作(性能相关:select_related,和prefetch_related重点)(以及事务操作)...