4.4 形參、實參與返回值《c陷阱與缺陷》學習筆記
形參
實參
static
posts
4.5 檢查外部型別
4.6 標頭檔案
總結
在c語言中,乙個重要的思想就是分別編譯,即若干個源程式可以在不同的時候單獨進行編譯,然後在恰當的時候整合到一起。但是聯結器一般是與c編譯器分離的,聯結器如何做到把若干個c源程式合併成乙個整體呢?簡而言之,聯結器就是用來連線各個編譯好的模組,然後將其組成乙個模組或者可執行檔案。且會檢查外部物件是否有重複,重複則報錯。因為大多數聯結器都進製同乙個載入模組中的兩個不同物件擁有相同的名稱。典型的聯結器把由編譯器或彙編器生成的若干個目標模組,整合成乙個被稱為載入模組或可執行檔案的實體,該實體能夠被作業系統直接執行。其中,某些目標模組是直接作為輸入提供給聯結器的;而另外一些目標模組則是根據連線過程的需要,從包括有類似printf函式的庫檔案中取得的。
宣告在函式體之外的變數是全域性變數,也稱為外部物件。
1.int a; //宣告
2.a = 1; //定義
3.int b = 1; //宣告並定義
如果使用了extern關鍵字,則代表該變數是其他地方分配的。
1.extern int a;
static修飾的變數只會初始化一次
,其值固定在記憶體空間直至銷毀,所以如果再次對其進行賦值是無效的。static變數可以重名
,不會發生衝突
1.static int a;
2.int a;
static宣告的函式可以在外部使用,一般稱其為靜態函式
。
1.static int g(int x)
2. 5.
6.void f()
7.
老生常談了,用段**來解釋下形參
和實參
。
1.#include2.void swap(int a,int b)
3.12.void swap1(int *a,int *b) //傳實參
13.19.int main()
20.
當函式指定了引數型別,會進行強制轉換
,比如:
1.double square(double);
2.square(2); //合法,會自動轉換為雙精度型別
函式除了建構函式
和析構函式
之外,都要宣告返回值,void或者其他型別。
在引用外部變數
的時候要注意最好是型別一樣,比如:
1.char filename = "/etc/passwd";
2.3.extern char* filename; //外部引用
雖然指標與陣列好像是一樣的,但是filename
的型別是「字元陣列
」,而不是「字元指標」
。在第二個宣告中,filename
被確定為乙個指標
。這兩個對filename
的宣告使用儲存空間的方式是不同的。
原記憶體布局
現記憶體布局
應該改為同樣型別:
1.char filename = "/etc";
2.extern char filename;
3.4.char* filename= "/etc";
5.extern char* filename;
每個外部物件應只在乙個標頭檔案
中宣告,需要用到該外部物件的所有模組
都應該包括這個標頭檔案
。定義該外部物件的模組也應該包括這個標頭檔案
。比如:
public.h
1.int a = 1;
2.char* str = "123";
main.c
1.#include 2.#include "public.h"
3.extern int a;
4.extern char* str;
5.int main()
6.
c語言的連線是乙個很強大的東西,將小的模組組成大的模組,檔案和變數之間能很好的進行互動,從而達到高內聚低耦合的效果。 《如何連線網路》第四章
首先,我們在上一章的傳輸技術夠用了嗎?不夠的,因為如果遠距離傳輸還用雙絞線什麼的,根本沒法正常使用。所以會有遠距離傳輸技術,本章涉及這些。另一點,遠距離傳輸的成本很大的,所以一般有運營商負責,那運營商在網路傳輸中做了什麼,本章也講了這個。為了方便理解,我用我的理解講這一段內容,內容會很模糊,具體的知...
第四章 繼承
一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...
第四章 物件
三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...