C 函式中的那些坑

2022-02-15 07:53:46 字數 944 閱讀 3695

平時寫程式時,我們可能或多或少對一些用法感到朦朧,下面我對一些易困惑大家,或者易用錯的地方作點介紹。

1.函式返回型別不能是陣列型別或函式型別,但可以是指向陣列或函式的指標。

2.如果乙個函式永遠不會被用到,那麼可以只有宣告沒有定義。

3.c++中建議用引用型別的形參代替指標。

使用static關鍵字可以令區域性變數的生命週期貫穿函式呼叫及之後的時間。物件只在程式執行第一次經過物件定義語句時初始化,直到程式終止才被銷毀。

舉個例子——

size_t countnum()

int main()

return 0;

}

程式輸出數字1到10。

如果使用傳值的形參,那麼拷貝大的類的物件或者容器物件時,效率比較低,或者某種型別可能不支援拷貝,那麼只能通過引用形參訪問該類的物件。

當函式無須修改引用形參的值時,最好使用常量引用,這是有原因的。

首先需要知道乙個約定:一般來說,非常量可以轉換成常量,反之則不行。

看下面這個例子——

int getwhitespacenum(string &strwords)

} return i;

}

這個函式是用來獲得乙個字串中有多少空白字元,函式體內並沒有對該字串有任何改動。

如果形參定義成普通的string &,那麼引數不可以傳字串字面值,也不能傳常量或者常量引用,帶來很多的問題。

但如果把引數寫成常量引用,這些問題將不復存在。

返回乙個值時,返回的將是值的副本;

返回引用型別時,返回的是物件的引用,不會發生拷貝。

注意:不要返回區域性物件的引用或指標!

const string &getname()

函式結束之後,臨時物件的空間被釋放,所以兩個return語句都指向了不再可用的記憶體空間。

C語言read函式的那些坑

今天在複習unix檔案系統,用到那個read函式,但是無意中卻掉到乙個坑里了,用了乙個多小時才找到問題根源,這裡記錄一下。問題是這樣的 我需要使用read和write函式把鍵盤輸入的資訊複製到輸出。所以我寫了如下程式 include define maxsize 10 int main void 輸...

DEV中c 11函式使用的那些坑

ps 如果你依舊還沒有解決話,可能是你的dev版本的問題。比如我這個版本的是藍橋競賽的版本,有些函式不能用。這個最新版本。不過,難受的是,新版的除錯功能又讓人頭疼!首先要把生成 效能分析資訊設定成yes.然後在gcc和g 中加入 d debug ps 有些博主的文章中寫了要在編譯器中兩個命令框中都加...

CEF 中的那些坑

cef chromium embedded framework 的大名也聽說很久了,最近因為客戶的需求,簡單地研究了一下。結果遇到了乙個接乙個的坑,且慢慢道來。比之前用qtwebkit的坑還要多和深。1.win32相關的視窗引數和位置設定 2.去除瀏覽器視窗的右鍵選單 這個問題很無奈,經搜尋說是可以...