C 學習 二 函式中的重要知識點

2022-08-03 04:12:15 字數 2695 閱讀 2341

有人說:函式呼叫是不是使得c++的程式複雜了,而且沒有什麼實際的用處呢?

恰恰相反,函式的使用讓程式的可讀性、可維護性更強。同時函式可以被反覆呼叫,也提高了模組的可復用性。

例1:計算計算1/(1!+2!)+1/(2!+3!)...+1/(10!+11!)

不使用函式:

#includeusing namespace std;

//計算1/1!--1/10!

int main()

//計算i+1!

for(int j = 1; j <= i+1; j++)

sum += 1.0 / (jc1+jc2);

}cout << sum << endl;

return 0;

}

使用函式:

#includeusing namespace std;

//計算n的階乘

double jc(int n)

return sum;

}//計算1/1!--1/10!

int main()

cout << sum << endl;

return 0;

}

執行結果: 0.5

對比上面兩段**不難看出,使用函式的**省去了重複編寫求n!的部分,避免了重複而冗餘的操作,比不使用函式的**更易於讓人理解,看起來更加清晰明了。

定義:在相同的宣告域中的函式名相同的,而參數列不同的,即通過函式的參數列而唯一標識並且來區分函式的一種特殊的函式。

使用過載的主要好處就是:不用為了對不同的引數型別或引數個數,而寫多個函式。多個函式用同乙個名字,但參數列,即引數的個數或(和)資料型別可以不同,呼叫的時候,雖然方法名字相同,但根據參數列可以自動呼叫對應的函式。

請看例2:

#includeusing namespace std;

int max(int a, int b)

int max(int a, int b, int c)else if(b >= a && b >= c)else if(c >= a && c >= b)

}int main()

執行結果:

例2中要求1,2中最大的乙個數和1,2,3中最大的乙個數,根據我們的經驗,使用max作為函式名是最好不過的了,但是若沒有函式過載,我們會需要寫乙個max2函式,乙個max3函式,太過麻煩。並且,若以後我們需要找出4個,5個或者更多數中最大的那乙個數,我們還要去編寫max4,max5,這樣下來,程式設計會變得十分繁瑣.

按值傳遞:在過程被呼叫時,傳遞給形參的是呼叫過程中的相應實參的值,形參與實參各占有不同位置的儲存空間,被呼叫過程在執行過程中,改變了形參變數的值,但不會呼叫過程的實參值。

具體的理解請看下面例子:

例三:

#includeusing namespace std;

void swap(int a, int a)

int main()

程式的執行結果為:

x = 1 y = 2

x = 1 y = 2

我們可能會想,為什麼我將x,y的值傳給了swap函式,並在函式內將他們的值交換,為什麼最終列印的他們的值沒變呢。原因是,我們函式傳值的方式是用的值傳遞而不是位址傳遞。

我對值傳遞的理解就是,我們在swap函式中新定義了a,b變數,然後將main函式中的x,y的值拷貝給了函式中的a,b,我們只是在函式中交換了函式中a,b的值,並沒有對main函式中的x,y值產生影響,並且,當函式結束後,a,b占用的記憶體也會被釋放,即a,b不存在了。

下面我們看位址傳遞:

例4:

#includeusing namespace std;

void swap(int &a, int &b)

int main()

程式的執行結果為:

x = 1 y = 2

x = 2 y = 1

我們不難看出,兩個例子的差別就在於swap函式的引數前加了兩個&。

我對引用傳遞的理解為:傳入函式的x,y就是main函式中的x,y,改變函式中的a,b的值也就是改變main函式中x,y的值,a,b相當於main函式中x,y的別名。

遞迴函式的組成:終止條件和遞迴呼叫。

核心思想:不要糾結於遞迴的過程,把計算交給計算機去做,我們只需要最後的結果

下面是兩個簡單的遞迴函式的實現:

例5:編寫遞迴函式計算1+2+...+n

#includeusing namespace std;

int fc(int n)else

}int main()

執行結果:

輸入: 10

輸出: 55

例6:若f(1)=1,f(2)=2,f(n) = f(n-1)+f(n-2),求f(n)

#includeusing namespace std;

int f(int n)else if(n == 2)

else

}int main()

執行結果:

輸入:3

輸出:3

注:由於以上程式的執行結果比較簡單,為方便大家閱讀,我就將程式的執行結果直接寫出.

以上為我總結的c++函式部分的重要知識點,如有錯誤,敬請指正.

C 重要知識點

參考從4行 看右值引用 什麼叫左值,什麼叫右值?可以對表示式取位址的是左值,不能對表示式取位址的是右值。例如 int a 1 這裡a是變數,在棧中為其分配了具體的位址,是左值。1是右值。例如 int a std max 1,3 max方法的返回值是右值,在賦值給a後會被銷毀,因此是右值。什麼是右值引...

C 中的引用(重要知識點)

引用即別名 對變數取另外的名稱,相當於是取了乙個錯號。引用變數與其所引用的變數的位址其實是同乙個 c 用引用來取代指標 宣告引用變數 資料型別 變數名 變數 資料型別 和 變數 的型別必須完全一致 1.引用必須初始化 引用一經定義必須初始化 int z 錯誤的 include using names...

C語言的重要知識點

一 陣列與指標 1 陣列名就是陣列的首位址,一維陣列中 nums nums 0 二維陣列中 nums nums 0 0 2 一維陣列中 nums i nums i 二維陣列中可以模擬,即把 nums i j 中的nums i 看作陣列名,所以二維陣列中的 nums i j nums i j 並最終表...