C語言高級編程2-條件編譯和結構體一+課件_第1頁
C語言高級編程2-條件編譯和結構體一+課件_第2頁
C語言高級編程2-條件編譯和結構體一+課件_第3頁
C語言高級編程2-條件編譯和結構體一+課件_第4頁
C語言高級編程2-條件編譯和結構體一+課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言高級編程-條件編譯和結構體一2內容提綱指針基礎指針和數組多級指針const/void指針3內容提綱函數定義、聲明和調用函數傳參指針函數和函數指針遞歸函數條件編譯編譯器根據條件的真假決定是否編譯相關的代碼,常見的條件編譯有兩種方法:

一、根據宏是否定義,其語法如下:

#ifdef<macro>

…… #else

…… #endif條件編譯實例:#define_DEBUG_#ifdef_DEBUG_printf(“Themacro_DEBUG_isdefined\n”);#elseprintf(“Themacro_DEBUG_isnotdefined\n”);#endif條件編譯二、根據宏的值,其語法如下:

#if<macro>

…… #else

…… #endif條件編譯實例:#define_DEBUG_1#if_DEBUG_printf(“Themacro_DEBUG_isdefined\n”);#elseprintf(“Themacro_DEBUG_isnotdefined\n”);#endif8課程目標掌握C語言中結構體掌握C語言中共用體8結構體簡述:在實際的處理對象中,有許多信息是由多個不同類型的數據組合在一起進行描述,而且這些不同類型的數據是互相聯系組成了一個有機的整體。此時,就要用到一種新的構造類型數據——結構體(structure),簡稱結構。結構體的使用為處理復雜的數據結構(如動態數據結構等)提供了有效的手段,而且,它們為函數間傳遞不同類型的數據提供了方便。

結構體概念結構體是用戶自定義的新數據類型,在結構體中可以包含若干個不同數據類型和不同意義的數據項(當然也可以相同),從而使這些數據項組合起來反映某一個信息。例如,可以定義一個職工worker結構體,在這個結構體中包括職工編號、姓名、性別、年齡、工資、家庭住址、聯系電話。這樣就可以用一個結構體數據類型的變量來存放某個職工的所有相關信息。并且,用戶自定義的數據類型worker也可以與int、double等基本數據類型一樣,用來作為定義其他變量的數據類型結構體定義:定義一個結構體類型的一般形式為:struct結構體名{數據類型成員名1;數據類型成員名2;:數據類型成員名n;};結構體在大括號中的內容也稱為“成員列表”或“域表”。其中,每個成員名的命名規則與變量名相同;數據類型可以是基本變量類型和數組類型,或者是一個結構體類型;用分號“;”作為結束符。整個結構的定義也用分號作為結束符結構體Example:定義一個職工worker結構體如下:structworker{ longnumber;charname[20];charsex; intage;//age是成員名

floatsalary;charaddress[80];}; //注意分號不能省略intage=10;//age是變量名

結構體說明: 結構體類型中的成員名可以與程序中的變量名相同,二者并不代表同一對象,編譯程序可以自動對它們進行區分。最后,總結一下結構體類型的特點: (1)結構體類型是用戶自行構造的。 (2)它由若干不同的基本數據類型的數據構成。 (3)它屬于C語言的一種數據類型,與整型、實型相當。因此,定義它時不分配空間,只有用它定義變量時才分配空間。結構體結構體類型變量的定義方法 先定義結構體類型再定義變量名這是C語言中定義結構體類型變量最常見的方式struct結構體名{

成員列表;};struct結構體名變量名;結構體Example:定義幾個職工變量:structworker { longnumber; charname[20]; charsex; intage; floatsalary; charaddress[80]; charphone[20]; }; structworkerworker1,worker2;結構體注意事項: “structworker”代表類型名,不能分開寫為:structworker1,worker2;

//錯誤,沒有指明是哪種結構體類型或workerworker1,worker2;

//錯誤,沒有struct關鍵字

//系統不認為worker是結構體類型為了使用上的方便,程序員通常用一個符號常量代表一個結構體類型。即在程序開頭加上下列語句:

#defineWORKERstructworker;

這樣在程序中,WORKER與structworker完全等效。結構體Example:WORKER{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];};WORKERworker1,worker2;

此時,可以直接用WORKER定義worker1、worker2兩個變量,而不必再寫關鍵字struct。結構體在定義類型的同時定義變量這種形式的定義的一般形式為:

struct結構體名

{

成員列表;

}變量名;

結構體Example:structworker{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];}worker1,worker2;

結構體直接定義結構類型變量其一般形式為: struct//沒有結構體名 {

成員列表; }變量名;

結構體Example:struct{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];}worker1,worker2;

結構體大小 一個結構體變量占用內存的實際大小,也可以利用sizeof求出。它的運算表達式為:

sizeof(運算量)

//求出給定的運算量占用內存空間的字節數 其中運算量可以是變量、數組或結構體變量,可以是數據類型的名稱。 例如:

sizeof(structworker) sizeof(worker1)結構體結構體變量的使用形式

結構體變量是不同數據類型的若干數據的集合體。在程序中使用結構體變量時,一般情況下不能把它作為一個整體參加數據處理,而參加各種運算和操作的是結構體變量的各個成員項數據。 結構體變量的成員用以下一般形式表示:

結構體變量名.成員名 例如,上節給出的結構體變量worker1具有下列七個成員:

worker1.number;;worker1.sex;

worker1.age;worker1.salary;worker1.address;

worker1.phone結構體結構體變量的使用形式

在定義了結構體變量后,就可以用不同的賦值方法對結構體變量的每個成員賦值。例如:

strcpy(,”ZhangSan”); worker1.age=26; strcpy(worker1.phone,”1234567”); worker1.sex=’m’; : :

除此之外,還可以引用結構體變量成員的地址以及成員中的元素。例如:引用結構體變量成員的首地址&;引用結構體變量成員的第二個字符[1];引用結構體變量的首地址&worker1。

結構體注意:

(1)不能將一個結構體類型變量作為一個整體加以引用,而只能對結構體類型變量中的各個成員分別引用。 例如,對上面定義的結構體類型變量wan,下列引用都是錯誤的:

cout<<wan; cin>>wan;

但是可以如下引用:

cout<<; cin>>;結構體

(2)如果成員本身又屬一個結構體類型,則要用若干個成員運算符,一級一級地找到最低的一級成員。只能對最低級的成員進行賦值或存取以及運算。例如,對上面定義的結構體類型變量worker1,可以這樣訪問各成員:

worker1.age

worker1.birthday.year worker1.birthday.month worker1.birthday.day

注意:不能用worker1.birthday來訪問worker1變量中的成員birthday,因為birthday本身是一個結構體變量。結構體

(3)對成員變量可以像普通變量一樣進行各種運算(根據其類型決定可以進行的運算)。例如:

worker2.age=worker1.age; sum=worker1.age+worker2.age; worker1.age++;

(4)在數組中,數組是不能彼此賦值的,而結構體類型變量可以相互賦值。 在C程序中,同一結構體類型的結構體變量之間允許相互賦值,而不同結構體類型的結構體變量之間不允許相互賦值,即使兩者包含有同樣的成員。結構體結構體變量的初始化

與其他類型變量一樣,也可以給結構體的每個成員賦初值,這稱為結構體的初始化。一種是在定義結構體變量時進行初始化,語法格式如下:

struct結構體名變量名={初始數據表}; 另一種是在定義結構體類型時進行結構體變量的初始化。

struct結構體名

{

成員列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論