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

2023-03-29 21:22:20 浏览数 (1)

文章目录

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

一、优化指针操作


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

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

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

优化后的指针操作 :

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

二、优化指针操作 2


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

代码语言:javascript复制
    // 将字符串最后一个字节拷贝过去
    *to = '';

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

代码语言:javascript复制
(*to = *from) != ''

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

优化后的函数代码 :

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

三、优化指针操作 3


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

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

代码语言:javascript复制
        from  ;
        to  ;

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

优化后的函数代码 :

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

四、优化指针操作 4


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

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

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

优化后的函数代码 :

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

0 人点赞