不使用中間變數實現strlen函式

2021-06-09 15:57:41 字數 651 閱讀 5156

2009騰迅校園招聘筆試題:不使用中間變數求const字串長度,即實現求字串長度庫函式strlen函式。函式介面宣告如下:int strlen(const char *p);

思路分析:

「不使用中間變數」是說程式設計師不能顯式的申請記憶體,即不能有區域性變數或者動態記憶體申請。如果函式自動申請棧記憶體或者使用暫存器儲存變數,或者使用立即數定址即常量,那麼就相當於「不使用中間變數」。從函式原型看,返回值為int,那麼在函式內部必定需要乙個地方儲存這個值,要麼是常數要麼是暫存器。長度不為1時不能一次就求出來,說明必須有遞迴呼叫,這樣遞迴時函式會自動申請棧記憶體,這樣就相當於程式設計師「不使用中間變數」了。中間返回的值通過暫存器自動儲存,最後一次返回時拷貝到int中去。c++中也有臨時物件的概念,都是程式在執行過程中由編譯器在棧中自動申請的物件,對程式設計師不可見,也相當於「不使用中間變數」

另外乙個不申請任何變數的典型題目是:反轉字串(

這種問題都是利用常量,或者將變數的申請交給編譯器在遞迴過程中自動在棧中申請。

#include using namespace std;

int mystrlen(const char* str)

void main()

{ char *str="diaoyu islands belong to china";

cout<

不使用任何中間變數實現strlen

2009騰迅校園招聘筆試題 不使用中間變數求const字串長度,即實現求字串長度庫函式strlen函式。函式介面宣告如下 int strlen const char p 思路分析 在字串中通常可以利用最後乙個結束符 0 但此處引數為const,唯讀,那麼我們不能打他的主意 函式執行過程中不占用記憶體...

不使用中間變數交換變數a b變數

這是一道經典題目,很基礎,但是經常考。題目描述 不用任何變數交換a b兩個變數。分析 交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的 void swap int a,int b int temp temp...

不使用中間變數實現兩個變數的交換

在實現程式功能時,我們經常要進行變數數值的交換,最近學習到在c語言中不用定義新變數來實現兩個變數數值的交換的方法,跟大家分享一下!下面是演算法的實現 include int main 程式可能有點難理解。在順序結構程式中,程式一條一條的依次執行。為了避免值和變數名的混淆,假定使用者輸入的是a0和b0...