宏定义、构造数据类型、循环结构——苏嵌是实训第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  基本数据类型符   用户自定义数据类型符 (相当于替换)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值