1、檔案包含
(1)1個include命令只能指定乙個被包含檔案,若有多個檔案要包含,則需用多個include命令。
(2)檔案包含允許巢狀,即在乙個被包含的檔案種包含另乙個檔案。
(3)包含命令中的檔名可以用雙括號括起來,也可以用尖括號括起來。但這兩種形式是有區別的:使用尖括號表示在包含檔案目錄中去查詢;使用雙引號表示首先在當前的源檔案目錄中去查詢,若未找到則到包含目錄中去查詢。
條件編譯
預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標**檔案,這對程式的移植和除錯是很有用的。
規則:#ifdef 識別符號
程式段1
#else
程式段2
#endif
功能:若識別符號已被#define命令過這對程式段1進行編譯,否則對程式段2進行編譯。若沒有程式段2,則#else可不寫。
2、結構體
有時需要將不同型別的陣列和成乙個有機的整體,以便於引用。
定義乙個結構體的一般形式為:
struct 結構名
成員表列
成員表列由若干個成員組成,每個成員都是該結構的組成部分,對每個成員也必須做型別說明,其形式為:型別說明符 成員名
例:
structstudent
可採取以下三種方法定義結構體型別變數:
(1)先宣告結構體型別再定義變數名
例:strct student student1,student2;
定義了student1和student2為strct student型別變數,即它們具有strct student型別的結構。
在定義結構體變數後,系統會為之分配記憶體單元。
(2)在宣告型別的同時定義變數
這種形式的定義一般形式為:
struct 結構體名
成員表列
}變數名表列;
例:
structstudent
student1,student2;
(3)直接定義結構體型別變數
一般形式為:
struct
成員表列
}變數名表列;
即不出現結構體名。
3、結構體巢狀:
例:
1 #include "stdafx.h
"2 #include3 #include45
void
main()6;
13struct
14boy1,boy2;
21 }
結構體變數的引用
規則:(1)不能將乙個結構體變數作為乙個整體進行輸入和輸出。
引用方式:結構體變數名.成員名
」.「是成員運算子,它在所有的運算子中優先順序最高,因此可以把student1.num作為乙個整體來看待。
例:student1.num=100是將100賦值給student1變數中的成員num。
例:
#include "stdafx.h
"#include
void
main()
;
struct
boy1,boy2;
boy1.num=007
; boy1.name="
jame";
scanf(
"%c%f
",&boy1.***,&boy1.score);
boy2=boy1;
printf(
"number=%d\nname=%s\n
",boy2.num,boy2.name);
printf(
"***=%c\nscore=%f\n
",boy2.***,boy2.score);
}
(2)若成員本身又屬於乙個結構體型別,則要用若干個成員運算子,一級一級地找到最低的一級成員。只能對最低階的成員進行賦值或訪問運算。
例:
#include "stdafx.h
"#include
void
main()
;
struct
boy1,boy2;
boy1.num=007
; boy1.name="
jame";
scanf(
"%c%f
",&boy1.***,&boy1.score);
scanf("%d
",&boy1.birthday.year);
scanf("%d
",&boy1.birthday.month);
scanf("%d
",&boy1.birthday.day);
boy2=boy1;
printf(
"number=%d\nname=%s\n
",boy2.num,boy2.name);
printf(
"***=%c\nscore=%f\n
",boy2.***,boy2.score);
printf(
"birthday:%d/%d/%d
",boy1.birthday.year,boy1.birthday.month,boy1.birthday.day);
}
(3)對結構體的變數成員可以像普通變數一樣進行各種運算(根據其型別決定可以進行的運算)
例:student2.score=student1.score;
sum=student2.score+student1.score;
(4)可以引用結構體變數成員的位址,也可以引用結構體變數的位址。
例:
#include "stdafx.h
"#include
void
main()
;
struct
boy1;
boy1.num=007
; boy1.name="
jame";
printf(
"the address of struct is %o:\n
",&boy1);
printf(
"the address of num is %o:\n
",&boy1.num);
}
注:不能整體讀入結構體變數。
例:scanf("%d,%s,%c,%d,%f,%s",&student1);
結構體變數的位址主要用作函式引數,傳遞結構體變數的位址。
結構體指標中包含結構體指標
將c 轉化為c的過程中,一些c 的特性無法使用 類內私有變數在類內公共函式中使用,轉化為c的時候選擇用malloc的方式,申請一段記憶體空間去儲存它,在函式中傳指標形參去操作這些變數。這時候遇到乙個問題,結構體中包含了另乙個結構體的指標,這導致了我malloc的時候,另乙個結構體中的記憶體空間沒有申...
結構體中包含unoin
設有若干個人員的資料,其中包含學生和教師。學生的資料中包括 號碼 姓名 性別 職業 班級。教師的資料報括 號碼 姓名 性別 職業 職務。可以看出,學生和教師所包含的資料是不同的。現在要求把這些資料放在同乙個 中儲存,使用結構體中的共用體實現。結構體定義如下 struct category 在以上的結...
C 組合(聚合)與C結構體中包含函式
今天突然想到c 的聚合,以前一直沒有注意,今天想到就寫下來,做個筆記 c 的類與我們的c語言中的結構體特別像,但是有有些不太一樣,這裡不多累贅了不能,大家學過的都知道。c 組合 聚合 我們知道的都是c 的類的物件,也就是例項化的過程,但是,有時候一些類我門需要他以聚合的形式來使用,比如設計模式裡面用...