檔案包含與結構體

2021-10-01 05:22:47 字數 3270 閱讀 5863

1、檔案包含

(1)1個include命令只能指定乙個被包含檔案,若有多個檔案要包含,則需用多個include命令。

(2)檔案包含允許巢狀,即在乙個被包含的檔案種包含另乙個檔案。

(3)包含命令中的檔名可以用雙括號括起來,也可以用尖括號括起來。但這兩種形式是有區別的:使用尖括號表示在包含檔案目錄中去查詢;使用雙引號表示首先在當前的源檔案目錄中去查詢,若未找到則到包含目錄中去查詢。

條件編譯

預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標**檔案,這對程式的移植和除錯是很有用的。

規則:#ifdef 識別符號

程式段1

#else

程式段2

#endif

功能:若識別符號已被#define命令過這對程式段1進行編譯,否則對程式段2進行編譯。若沒有程式段2,則#else可不寫。

2、結構體

有時需要將不同型別的陣列和成乙個有機的整體,以便於引用。

定義乙個結構體的一般形式為:

struct 結構名

成員表列

成員表列由若干個成員組成,每個成員都是該結構的組成部分,對每個成員也必須做型別說明,其形式為:型別說明符  成員名

例:

struct

student

可採取以下三種方法定義結構體型別變數:

(1)先宣告結構體型別再定義變數名

例:strct student  student1,student2;

定義了student1和student2為strct student型別變數,即它們具有strct student型別的結構。

在定義結構體變數後,系統會為之分配記憶體單元。

(2)在宣告型別的同時定義變數

這種形式的定義一般形式為:

struct 結構體名

成員表列

}變數名表列;

例:

struct

student

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 的類的物件,也就是例項化的過程,但是,有時候一些類我門需要他以聚合的形式來使用,比如設計模式裡面用...