宏定義、構造數據類型、循環結構——蘇嵌是實訓第8天

一:宏

     宏定義又稱爲宏代換、宏替換,簡稱“宏”。

1.宏定義的格式

       宏定義的一般格式是:

          #define  宏名  宏體

       宏名通常用英文大寫字母表示。列如:

         #define YES 1

       宏名如果出現在字符串中,編譯預處理不會對它進行替換。例如程序段

         char *ps

         ps=x==YES; printf(%s\n,ps);

       變量ps右邊出現的YES不會被置換,輸出結果爲x==YES而不是x==1

 2. 宏定義的嵌套

       嵌套的宏定義,就是用定義過的宏名去定義另一個宏名。例如:

        #define WIDTH 80

       #define LENGTH (WIDTH+40)

       在第二個宏定義中,使用了前面定義過的宏名WIDTH。在編譯預處理時,程序中所有的WIDTH都被80所替換,所有的LENGTH又被(80+40)替換。

3. 宏定義的功能

      (1) 定義符號常量:可以提高程序的運行效率

      (2) 定義函數

       例如:

        #define POWER(X) ((X)*(X))

       如下是打印0~99的平方的程序

        int i;

        for (i=0;i<100;i++)

          printf(%d  ,POWER(i));

       易錯的一道程序:

       #define SQUARE(n) ((n)*(n))

        main()

          { int i=1;

            while (i<=10)

              printf(%d\n,SQUARE(i++));}

運行結果爲(2,12,30,56,90)

經宏替換後,printf()函數語句被置換爲:

        printf(%d\n,(i++)*(i++));

4. 宏定義的解除

    #undef 宏名

http://learn.akae.cn/media/ch21s02.html)

二:構造數據類型

2.1結構體

  結構體類型的聲明

  struct 結構體名

  { 成員列表

   };

   (1)“struct”是C語言的關鍵字,是結構體類型的標誌。

   (2)結構體類型的大小是其所有成員所佔空間字節數相加之和。(在linux下,由於存在內存空洞,所佔字節數要滿足字對齊或半對齊)求空間字節數的方法:如下,n=8.注。在linux下,int爲4字節,char爲1字節。
struct date 
{
    char a;
    int b;
};

int main()
{
    struct date k;
    int n;
    n=sizeof(k);
    printf("%d\n",n);
}

   (3)花括號外的分號必不可少。

     struct  date 

     { int year,month,day;

     }sund;

   (4)結構體類型的聲明還允許嵌套。如:

      struct student

     {

      int  num;

      char  name[20];

      struct  date  birthday;

      }stul;

    (5)結構體變量的初始化,所有初值與各成員數據類型要匹配或兼容。

      如:struct student  stul={1306,“zhouyang”,1989,12,14};

    (6)結構體變量的使用:結構體變量名.成員名(實心點是成員運算符,如:sund.year    sund.month)。

    (7)結構體變量作爲函數參數傳遞的是所有成員的數據。

    (8)結構體指針。使用如下:

        struct worker  

        { int num;

          char name[20];

         }wk,*pw;

        引用結構體元素中的成員:(*pw).num,或pw->num。即是wk.nume。

共同體類型

     和結構體有很多相似之處,其主要特點是,共同體變量中的所有成員佔用同一段存儲空間,這段空間的大小就是所有成員中字節數最大的值。在linux下,要滿足字對齊或半對齊。(內存空洞的產生)

枚舉類型(enum)

     枚舉類型就是一一列舉出來變量的值,然後此變量就只能使用列舉出來的值。 

     枚舉類型定義的一般形式爲:enum 枚舉名 {枚舉值表};

     例如:

     enum  weekday

     { sun,mou,tue,wed,thu,fri,sat };

     定義枚舉類型變量:enum weekday a,b,c;或

     enum  weekday

     { sun,mon,tue,wed,thu,fri,sat } a,b,c;

注意點:(1)枚舉值是常量,不是變量,不能在程序中用賦值語句再對它賦值。“sun=1; mon=2;”是錯誤的。

           (2)枚舉元素本身有系統定義了一個表示序號的數值,從0開始順序定義爲0、1、2、3.....。如sun=0,mon=1.

typedef自定義類型

     基本格式:typedef  基本數據類型符   用戶自定義數據類型符 (相當於替換)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章