C C 學習筆記 四

2021-06-18 08:47:05 字數 2206 閱讀 9906

到目前為止,我們定義的所有函式都是在它們第一次被呼叫(通常是在main中)之前,而把main 函式放在最後。如果重複以上幾個例子,但把main 函式放在其它被它呼叫的函式之前,你就會遇到編譯錯誤。原因是在呼叫乙個函式之前,函式必須已經被定義了,就像我們前面例子中所做的。

但實際上還有一種方法來避免在main 或其它函式之前寫出所有被他們呼叫的函式的**,那就是在使用前先宣告函式的原型定義。宣告函式就是對函式在的完整定義之前做乙個短小重要的宣告,以便讓編譯器知道函式的引數和返回值型別。

它的形式是:

type name ( argument_type1, argument_type2, ...);它與乙個函式的頭定義(header definition)一樣,除了:

// 宣告函式原型

#include void odd (int a);

void even (int a);

int main () while (i!=0);

return 0;

}void odd (int a)

void even (int a)

這個例子的確不是很有效率,我相信現在你已經可以只用一半行數的**來完成同樣的功能。但這個例子顯示了函式原型(prototyping functions)是怎樣工作的。並且在這個具體的例子中,兩個函式中至少有乙個是必須定義原型的。

這裡我們首先看到的是函式odd 和even的原型:

void odd (int a);

void even (int a);

這樣使得這兩個函式可以在它們被完整定義之前就被使用,例如在main中被呼叫,這樣main就可以被放在邏輯上更合理的位置:即程式**的開頭部分。

儘管如此,這個程式需要至少乙個函式原型定義的特殊原因是因為在odd 函式裡需要呼叫even 函式,而在even 函式裡也同樣需要呼叫odd函式。如果兩個函式任何乙個都沒被提前定義原型的話,就會出現編譯錯誤,因為或者odd 在even 函式中是不可見的(因為它還沒有被定義),或者even 函式在odd函式中是不可見的。

很多程式設計師建議給所有的函式定義原型。這也是我的建議,特別是在有很多函式或函式很長的情況下。把所有函式的原型定義放在乙個地方,可以使我們在決定怎樣呼叫這些函式的時候輕鬆一些,同時也有助於生成標頭檔案。

有時候我們需要將陣列作為引數傳給函式。在c++ 中將一整塊記憶體中的數值作為引數完整的傳遞給乙個函式是不可能的,即使是乙個規整的陣列也不可能,但是允許傳遞它的位址。它們的實際作用是一樣的,但傳遞位址更快速有效。

要定義陣列為引數,我們只需要在宣告函式的時候指明引數陣列的基本資料型別,乙個標識後面再跟一對空括號就可以了。例如以下的函式:

void procedure (int arg)

接受乙個叫做arg的整型陣列為引數。為了給這個函式傳遞乙個按如下定義的陣列:

int myarray [40];

其呼叫方式可寫為:

procedure (myarray);

前面基礎知識部分講c++變數型別的時候,我們已經提到過c++的標準函式庫提供了乙個string類來支援對字串的操作。然而,字串實際就是一串連續的字串行,所以我們也可以用簡單的字元陣列來表示它。

通常給陣列賦值,或更具體些,給字串行賦值的方法是使用一些函式,例如strcpy。strcpy (string copy) 在函式庫cstring (string.h) 中被定義,可以用以下方式被呼叫:strcpy (string1, string2);這個函式將string2 中的內容拷貝給string1。string2 可以是乙個陣列,乙個指標,或乙個字串常量constant string。

鑑於字串可能包含其他資料型別的內容,例如數字,將字串內容轉換成數字型變數的功能會有用處。例如乙個字串的內容可能是"1977",但這乙個5個字元組成序列,並不容易轉換為乙個單獨的整數。因此,函式庫cstdlib (stdlib.h) 提供了3個有用的函式:

所有這些函式接受乙個引數,返回乙個指定型別的資料(int, long 或 float)。這三個函式與cin.getline 一起使用來獲得使用者輸入的數值,比傳統的cin>> 方法更可靠:

函式庫cstring (string.h) 定義了許多可以像c語言類似的處理字串的函式 (如前面已經解釋過的函式strcpy)。這裡再簡單列舉一些最常用的:

注意:char* 與char 相同。

C C 學習筆記(四)

1,c 為類提供的特殊成員函式 預設建構函式 編譯器提供乙個不接受任何引數,也不執行任何操作的建構函式,在建立類物件的時候會被呼叫,如果現式的定義了建構函式,那麼 預設建構函式將不會被呼叫。預設析構函式 複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中,它使用者在初始化過程中而不是在賦值...

C C學習筆記

1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...

C,C 學習筆記

1.求a的n次方 標頭檔案pow a,n a,n都為double 2.關於指標的一些小測試 includeusing namespace std int main int a 8 int m 3 cout 3.sort位於 algorithm 中,sort p,p n 預設公升序排列。4.inclu...