參考ucos2的string.c、uboot(kernel)的string.c.
選擇最簡單的函式strlen作為分析,實踐對比學習的方法,產生更多的思考。
原理也比較簡單:字串的結束標誌為』\0』。所以測試乙個字串的長度,就是迴圈讀到』\0』.計算讀了多少個字元,最後返回長度。
在ucos中的原始碼:
cpu_size_t str_len
(cpu_char *pstr)
return
(len)
;}
在uboot中的實現:
size_t strlen
(const
char
*s)
一對比**,我們可以從中學習到很多東西:
ucos的**實現方式更像是我們一般的思路的實現方式。
我們要返回長度,那就定義乙個長度的變數,我們要迴圈判斷是否到結尾,就用個while,然後++計數。
細節:1.傳入型引數const的標記
2.const char *sc;的細節,指向位址內容不能被修改
3.for (sc = s; *sc!=』\0』;++sc),一句話就完成了迴圈遍歷。
4.++sc的細節也是體現效率的地方
5.最後返回值只需要sc-s的位址相減的一次計算,相比len++提高效率。
6.野指標的處理,ucos2中有單獨的判斷,而在uboot中沒有。
對比**的學習好處:
1.能以兩種不同的方式看實現方式
2.能發現優劣
3.能容易的理解
4.當發現不同時,努力糾其根本,也是種樂趣
5.相對更容易記憶
sizeof總結並於strlen對比
在c c 中,sizeof是乙個判斷資料型別或者表示式長度的運算子。其作用好像類似於strlen 函式,但是兩者還是有所不同。the sizeof keyword gives the amount of storage,in bytes,associated with a variable or a...
sizeof與strlen對比小實驗。。
include includeusing namespace std void func char str 100 cout 總之,對於指標,sizeof操作符返回這個指標佔的空間,一般是4個位元組 而對於乙個陣列,sizeof返回這個陣列所有元素佔的總空間。char 與char容易混淆,一定要分清...
strlen函式的實現
strlen函式作為乙個在面試經常被問到的問題,相信在不少求職的面經經歷中都有強調 首先看一下strlen函式的作用和基本的作用 計算字串的長度而不包括結束志 0 由此我們又可以聯想到與他相類似的相對應的另乙個關鍵字sizeof 計算字串的長度,且包括結束標誌 0 在此我只是提一下sizeof,下面...