以前,我有個朋友認為,學習c++,只要把指標,類,結構體等基礎的,再結合自己的聰明才智,就可以結合實際工程的**看懂,然後慢慢開始學會**了。
然而,事實上並不是這樣,因為c++中還有好多細節需要知道,特別是與函式相關的。
第一:函式與陣列的關係和使用;
第二:函式與二維陣列的關係和呼叫,更高維;
第三:函式和字串的關係和呼叫;
第四:函式與結構體的關係和呼叫;
第五:函式與string物件的關係和呼叫;
第六:函式和array物件的關係和呼叫;
第七:函式指標;
關於函式的定義,其實很簡單,就如下格式:
void
fun_name
(paramaterlist)
從上述**可以看出,裡面還有乙個return
這是因為函式還存在兩種情況,即有返回值的函式和無返回值的函式:
無返回值的函式也被稱為void函式,其書寫個數如上述**所示。
無返回值的函式往往是實現一些具體的功能,如列印和顯示已經計算完成的資料數值等。
有返回值的函式會返回乙個具體的結果,例如作為實際工程中某個變數的右值。
如下**所示:
#include
using
namespace std;
intadd
(int
,int);
//函式原型
intmain()
intadd
(int x,
int y)
//書寫乙個簡單的求和函式
首先給出乙個簡單的**,然後根據該**解釋函式原型以及函式原型的語法和功能作用
#include
//首先宣告函式原型,在函式原型中,可以定義函式的變數型別和變數名,也可以之定義變數型別,不定義變數名
void
cheers
(int);
double
cube
(double x)
;int
main()
//寫函式體
void
cheers
(int n)
double
cube
(double x)
原型描述了函式到編譯器的介面,也就是說,他將函式返回值的型別(如果有返回值)以及引數的型別和數量告訴編譯器。例如:
double volume = cube(side);
首先,原型告訴編譯器,cube()有乙個double型別的引數。如果程式沒有提供這樣的引數,原型將讓編譯器能夠捕獲這種錯誤。
齊次,cube()函式完成計算後,將把返回值放置在指定的位置(可能是cpu暫存器,也可能是記憶體中)。
重要的一點是,c++允許將乙個程式放在讀個檔案中並單獨編譯這些檔案。然後再將他們組合起來。在這種情況下,編譯器在變異main()函式時,可能無權訪問函式**。如果函式位於庫中,情況也將如此。
避免使用函式原型的唯一方法是,在首次使用函式之前就定義它,但這並不總是可行的。
在前面也說過,定義函式原型,必須在原型函式頭中定義變數的型別(int double等等),同時也可以提供變數名,當然,不給出變數名也不會錯。
例如上述**的兩個原型
void
cheers
(int);
double
cube
(double x)
;
c++通常是按值傳遞引數,這就意味著將數值引數傳遞給函式,而後後者將被賦值給乙個新的變數。例如:上述**中,包含下面的函式呼叫:
double volume =
cube
(side)
;
其中,side是乙個變數,在前面的執行程式中,其值為5。cube()的函式頭如下:
double
cube
(double x)
;
被呼叫時,該函式將建立乙個新的名為x的double變數,並將其初始化為5。這樣,cube()執行的操作不會影響main()中的資料,因為cube()使用的是side的副本,而不是原來的資料。
在函式中宣告的變數(包括引數)是該函式私有的。在函式被呼叫時,計算機將為這些變數分配記憶體;在函式結束時,計算機將釋放這些變數使用的記憶體。這樣的變數成為區域性變數,因為他們被限制在函式中。
當然,乙個函式不可能只有乙個引數,寫乙個函式,往往會需要同時輸入多個引數。
當然,當乙個函式中存在多個引數的時候,也需要規範化在函式頭中使用多引數的形式。
我們知道,當我們在函式中定義變數時,我們可以在函式中這樣定義變數:
int
main()
然而,如果在函式投中存在多個引數時,如果我們使用這種形式來定義則是錯誤的,,例如:
void
add(
int a,
int b)
上述是正確的定義方法。
如果我們使用下面的方法,則是錯誤的:
void
add(
int a,b)
C 基礎知識 函式
寫在前面 在剛上大學的時候,學習各種各樣的計算機基礎知識,對我而言,剛開的時候我是不理解的,知識太抽象,只是機械的記住了概念和用法,往往忽略了一些細節。當自己實踐增多的時候,各種知識漸漸的清晰起來,所有東西都是有來龍去脈的,原來不理解的東西都豁然開朗起來。這個時候再取回顧原來學習的知識技能,又有一種...
函式基礎知識
1.函式呼叫 注意函式名稱,引數個數,引數資料型別 2.函式定義 def 函式名 引數 函式體return 返回值 函式中也可以直接使用pass,意為什麼也不做,目的是讓程式能夠執行不報錯 python有一點值得注意,返回值可以為多個,例如 d def get weight and height d...
C 基礎知識 轉換函式
1.舉例 分數物件視為doubule型別class fraction operator double const private int m num int m den 2.轉換函式的特點 2.1 沒有函式返回型別 2.2 沒有引數 2.3 必須是成員函式 3.注意事項 3.1 如果定義了全域性過載...