有人說:函式呼叫是不是使得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 並最終表...