1、
定義函式
1、c++對於返回值有一定的限制:
不能是陣列
,但可以是其他任何型別——整數、浮點數、指標,甚至可以是結構和物件(
雖然不能直接返回陣列,但是將陣列作為結構或物件部分來返回
)。2、
函式如何返回值的?
函式通過返回值到指定的cpu暫存器或記憶體單元中來將其返回。隨後,呼叫程式將檢視該記憶體單元。呼叫函式是通過函式原型的定義得知該記憶體單元儲存的資料型別。
2、函式原型的功能:
1、編譯器正確處理函式返回值。
2、編譯器檢查使用的引數數目是否正確。
3、如果不正確,則轉換成正確的型別(如果可能的話)。
在編譯階段進行的原型化被稱為
靜態型別檢查
(statictypechecking)。可以捕獲許多在執行階段非常難以捕獲的錯誤。
3、函式引數和按值傳遞
1、形參(參量)
:接收傳遞值的變數;
實參(引數)
:傳遞給函式的值。
2、函式中宣告的變數(包括引數)是該函式私有的,呼叫結束自動釋放。
被稱為:
區域性變數、自動變數。
4、函式和陣列
用陣列作為引數的優缺點:
1、節省複製整個陣列所需的時間和記憶體。
2、增加了原始資料
被破壞的風險
。可以用
const
限定符來解決這個問題。--voidshow(constintarr,intn);這
並不是意味著原始陣列必須是常量,而是意味著不能在show()中使用arr修改資料
。這使得arr[0]+=10;的行為被禁止。
5、指標和const
1、指標指向乙個常量物件,可以防止使用該指標來修改所指向的值。
constint*pt=#
pt的宣告並不意味著它指向的值實際上是乙個常量,而是對於pt而言,這個量是常量,
不能通過pt修改num的值,但是可以更改pt指標的指向。
記住:如果資料型別本身並不是指標,則可以將const資料或非const資料的位址賦給指向const的指標,但只能將const資料的位址賦給非const指標。
2、將指標本身宣告為常量,
防止改變指標指向的位置
。int*constpt=#
可以通過pt修改num的值。
3、兩種均不能修改的方式:
constint*contpt=#
6、函式和結構
與單值變數行為很接近,也可以按值傳遞結構,
缺點:如果結構體非常大,則複製結構將增加記憶體要求,降低系統執行速度。----可以傳遞結構位址來解決。
voidshow(const
polar*pda)
7、函式指標
1、函式也有位址,函式的位址是儲存其機器語言**的記憶體的開始位址。
2、一定要區別傳遞的是函式的位址還是函式的返回值。
1、process(think);
使得process()
能夠在其內部呼叫think()函式;2、
thought(think());
首先呼叫think(),然後
將think()的返回值傳遞給thought()函式
。3、宣告函式指標
1、double(*pt)(int)
;(*pt)是函式,
pf是指向函式的指標。
2、double*pt(int);
因為()優先順序比*高,所有表示式以為著pf()為乙個返回指標的函式。(wrong!)
3、呼叫函式指標的例子:
double
betsy
(int);
double
pam(int);
void
estimate
(intlines,
double(*pf)(int)
);可以進行如下操作:1、
estimate
(line,
betsy
);2、
estimate
(line,
pam);
c primer plus學習筆記
1.變數名命名規則 重要的 1 有含義 2 只能用字母字元 數字和下劃線 3 第乙個字元不能是數字 4 區分大小寫 5 不能用c 關鍵字 2.整型 1 無符合型別不能表負值 2 char short 16 int short long 32,int 和longlong 64,long c 11 寬度...
C PrimerPlus學習筆記
if語句中判斷恒等,將常量放前,防止由於 寫成 造成的難以查詢的bug。if 0 count 若寫成 0 count 會報錯,count 0 則不會命名空間 using namespace std cout one cout two std cout one std cout two using s...
C Primer Plus學習筆記
1.組合語言是特地的cpu設計所採用的一組內部指令的助記符,不同的cpu型別使用不同的cpu c給予你更多的自由,也讓你承擔更多的風險 自由的代價是永遠的警惕 2.目標 檔案 可執行檔案和庫 3.可以用畫幾個盒子的方式來跟蹤乙個程式的變數 一門語言的語法就是一套規則,用於管理這種語言中的合法語句組織...