預處理 結構體10個問答

2021-08-09 21:28:26 字數 1641 閱讀 2162

1、c語言中,巨集分為哪幾種?

答:巨集定義是由源程式中的巨集定義命令完成的,巨集分為有引數和無引數兩種。

2、無參巨集定義如何實現的?

答:形式:

#define 識別符號 字串

說明:#表示這是一條預處理命令,

define

為巨集定義命令,識別符號為鎖定義的巨集名,字串可以是常數、表示式、格式串等。

eg:#define m (y*y+3*y)

3、巨集定義加上分號會怎麼樣?

答:巨集定義不是說明或者語句,在行末不必加上分號,否則會連分號一起置換。

4、巨集定義的位置及作用域是啥?

答:巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束,也可以用「#undef

」命令終止。

5、結構體的定義是啥?

答:結構體是一種專門設計用來儲存不同資料型別元素集合

結構體與陣列的對比:

> 陣列:只能由多個相同型別的資料構成。

> 結構體:可以由多個不同型別的資料構成。

結構體內部的元素,也就是組成成分,我們一般稱為"成員

"。結構體的一般定義形式為:

struct結構體名

car;//直接定義變數

//單獨定義結構體變數

struct car car

6、結構體如何初始化?

答:初始化:

struct car car;

car = ;

//使用:

printf("%d",car.wheels);

7、結構體陣列有哪

3種定義方式? 答:

struct student stu[5]; //定義2

struct stu[5]; //定義3

上面3種方式,都是定義了乙個變數名為

stu的結構體陣列,陣列元素個數是5。

初始化:

struct stu[2] = , };

也可以用陣列下標訪問每乙個結構體元素,跟普通陣列的用法是一樣的。

8、結構體有作用域注意點?

答:結構體型別的作用域

1> 定義在函式外面:全域性有效(從定義型別的那行開始,一直到檔案結尾)

2> 定義在函式(**塊)內部:區域性有效(從定義型別的那行開始,一直到**塊結束)

不允許對結構體進行自身遞迴定義。

結構體內可以包含別的結構體。

只有在定義結構體變數時才會進行記憶體空間分配。

9、結構體與函式的注意點?

如果結構體作為函式引數,只是將實參結構體所有成員的值對應地賦值給了形參結構體的所有成員

修改函式內部結構體的成員不會影響外面的實參結構體

10、結構體和聯合體的區別是啥?

答:struct和

union

都是由多個不同的資料型別成員組成的,但在任何同一時刻,

union

中只存放了乙個被選中的成員,而

struct

的所有成員都存在。

struct

中各成員都占有自己的記憶體空間,他們是同時存在的,乙個

struct

變數的等於所有成員長度之和,在

union

中,所有成員不能占用它的記憶體空間,他們不能同時存在,

union

變數的長度等於最長的成員的長度。

預處理,結構體

q 巨集定義的定義和型別。a 巨集定義是由源程式中的巨集定義命令完成的,巨集代換是由預處理程式自動完成的,在 c語言中,巨集定義分為有參和無參兩種。無參巨集巨集名後不帶引數,其定義的一般形式為 define 識別符號 字串 帶參巨集的引數為形參,其一般形式為 define 巨集名 形參表 字串。q ...

預處理與結構體

巨集定義 檔案包含 條件編譯1 巨集定義不是說明或語句,不需要在結尾加上分號 2 巨集定義必須寫在函式之外,其作用域是巨集定義命令起到源程式結束,如需要終止可使用 undef命令 3 預處理程式不對巨集定義做任何檢查,如有錯誤,只能在編譯被巨集定義展開後的源程式時發現1 巨集會在編譯器在對源 進行編...

結構體對齊預處理指令

方式一 n可以取以下5個數中的任意乙個 1,2,4,8,16 來自定義結構體成員的對齊方式 pragma pack n 這裡放置結構體 pragma pack 取消自定義位元組對齊方式方式二 n可以取以下5個數中的任意乙個 1,2,4,8,16 來自定義結構體成員的對齊方式 pragma pack ...