1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【C 语言】字符串拷贝 ( 优化指针操作 )

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

时间:2022-03-04 14:19:07

相关推荐

【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++)){}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。