函式功能:
統計字串中的字元個數。
很簡單,直接設乙個變數,並遍歷即可。
int strlen(const char *str)
但如果不讓使用中間變數呢?
函式執行過程中不占用記憶體基本不可能,除非都使用了暫存器。「不使用中間變數」只是說程式設計師不能顯示的申請記憶體而已,即不能有區域性變數或者動態記憶體申請。
如果函式自動申請棧記憶體或者使用暫存器儲存變數,或者使用立即數定址即常量,那麼就相當於「不使用中間變數」。
從函式原型看,返回值為int,那麼在函式內部必定需要乙個地方儲存這個值,要麼是常數要麼是暫存器。長度不為1時不能一次就求出來,說明必須有遞迴呼叫,這樣遞迴時函式會自動申請棧記憶體,這樣就相當於程式設計師「不使用中間變數」了。中間返回的值通過暫存器自動儲存,最後一次返回時拷貝到int中去。c/c++中也有臨時物件的概念,都是程式在執行過程中由編譯器在棧中自動申請的物件,對程式設計師不可見,也相當於「不使用中間變數」
另外乙個不申請任何變數的典型題目是:反轉字串
這種問題都是利用常量,或者將變數的申請交給編譯器在遞迴過程中自動在棧中申請,也就是借刀殺人了。
int mystrlen(const char *str) /* 不用中間變數,用遞迴實現,很容易看懂 */
else
}
strlen函式的實現
strlen函式作為乙個在面試經常被問到的問題,相信在不少求職的面經經歷中都有強調 首先看一下strlen函式的作用和基本的作用 計算字串的長度而不包括結束志 0 由此我們又可以聯想到與他相類似的相對應的另乙個關鍵字sizeof 計算字串的長度,且包括結束標誌 0 在此我只是提一下sizeof,下面...
strlen函式的實現
求字串長度,strlen函式 strlen要找到 0停下來,返回的長度不包括 0 include stdio.h include stdlib.h include assert.h 1 建立臨時變數 用計數器 int my strlen char str 用指標接受,找 0 return count...
模擬實現strlen函式
題目 模擬實現strlen函式 非遞迴方式 主要是借助計數器的方式,利用指標移動乙個乙個數字符個數,直到遇到末尾的 0截止 define crt secure no warnings 1 include include include 非遞迴實現strlen int strlen const cha...