【C 语言】字符串拷贝 ( 优化指针操作 )
文章目錄
- 一、優(yōu)化指針操作
- 二、優(yōu)化指針操作 2
- 三、優(yōu)化指針操作 3
- 四、優(yōu)化指針操作 4
一、優(yōu)化指針操作
在上一篇博客 【C 語言】字符串拷貝 ( 字符串拷貝業(yè)務(wù)邏輯代碼 | 分離 主函數(shù) 與 字符串拷貝 業(yè)務(wù)模型 ) 的基礎(chǔ)上 , 優(yōu)化指針操作 ;
重點是 *to++ = *from++; 操作 , ++ 操作的優(yōu)先級高于 * 操作 ;
上述代碼中 , 先進行 *to = *from; 操作 , 然后進行 to++, from++;
優(yōu)化后的指針操作 :
/** 實現(xiàn)字符串拷貝 ( 實現(xiàn)了模塊化 )* 將 from 指針指向的字符串 拷貝到 to 指針指向的字符串換*/ void str_copy(char *from, char *to) {// 如果 from 指向的字符不為 \0 , 則繼續(xù)遍歷// 此處無法將 \0 拷貝到 to 字符串中for(; *from != '\0'; from, to){// 拷貝字符*to++ = *from++;}// 將字符串最后一個字節(jié)拷貝過去*to = '\0'; }二、優(yōu)化指針操作 2
之前的字符串拷貝方法 , 總是需要在最后特別將 ‘\0’ 字符拷貝過去 ;
// 將字符串最后一個字節(jié)拷貝過去*to = '\0';使用下面的代碼 , 直接在 循環(huán)條件 中進行拷貝賦值操作 , 從 from 指針指向的字符 拷貝到 to 指針指向的字符 , 如果拷貝的值不是 \0 , 則指針累加 繼續(xù)拷貝 , 如果拷貝的值是 \0 , 就退出循環(huán) ;
(*to = *from) != '\0'但是即使退出循環(huán) , '\0' 字符也拷貝成功了 , 這樣就不需要額外拷貝 \0 字符了 ;
優(yōu)化后的函數(shù)代碼 :
/** 實現(xiàn)字符串拷貝 ( 實現(xiàn)了模塊化 )* 將 from 指針指向的字符串 拷貝到 to 指針指向的字符串換*/ void str_copy2(char *from, char *to) {// 從 from 指針指向的字符 拷貝到// to 指針指向的字符// 如果拷貝的值不是 \0 , 則指針累加// 如果拷貝的值是 \0// 這樣就不需要額外拷貝 \0 字符了while((*to = *from) != '\0'){from++;to++;} }三、優(yōu)化指針操作 3
在 一、 中 , 有如下結(jié)論 : *to++ = *from++; 操作 , ++ 操作的優(yōu)先級高于 * 操作 ; 上述代碼中 , 先進行 *to = *from; 操作 , 然后進行 to++, from++;
借助該結(jié)論 , 繼續(xù)優(yōu)化 二、 中的代碼 : 可以將 函數(shù)體 中的
from++;to++;操作 , 移植到循環(huán)條件中執(zhí)行 ;
優(yōu)化后的函數(shù)代碼 :
/** 實現(xiàn)字符串拷貝 ( 實現(xiàn)了模塊化 )* 將 from 指針指向的字符串 拷貝到 to 指針指向的字符串換*/ void str_copy2(char *from, char *to) {// 從 from 指針指向的字符 拷貝到// to 指針指向的字符// 如果拷貝的值不是 \0 , 則指針累加// 如果拷貝的值是 \0// 這樣就不需要額外拷貝 \0 字符了while((*to++ = *from++) != '\0'){} }四、優(yōu)化指針操作 4
在 三、的基礎(chǔ)上進行優(yōu)化 , (*to++ = *from++) 表達式與 0 進行比較 , 0 可以理解成 FALSE , 非 0 可以理解為 TRUE ;
- (*to++ = *from++) 等于 0 , 該表達式值就是 FALSE ;
- (*to++ = *from++) 不等于 0 , 該表達式值就是 TRUE ;
因此 , 這里可以直接將 (*to++ = *from++) != '\0' 表達式后面的 != '\0' 比較刪除 ;
優(yōu)化后的函數(shù)代碼 :
/** 實現(xiàn)字符串拷貝 ( 實現(xiàn)了模塊化 )* 將 from 指針指向的字符串 拷貝到 to 指針指向的字符串換*/ void str_copy2(char *from, char *to) {// 從 from 指針指向的字符 拷貝到// to 指針指向的字符// 如果拷貝的值不是 \0 , 則指針累加// 如果拷貝的值是 \0// 這樣就不需要額外拷貝 \0 字符了while((*to++ = *from++)){} }總結(jié)
以上是生活随笔為你收集整理的【C 语言】字符串拷贝 ( 优化指针操作 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】字符串拷贝 ( 字符串拷贝业
- 下一篇: 【错误记录】安卓 RecyclerVie