Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89182
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 16
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-19 16:47
文章分类
文章存档

2013年(28)

分类: C/C++

2013-04-19 20:34:23

原文地址:C语言之结构体 作者:樱木的追风者

1.结构体
1.1声明结构体类型
    struct 结构体类型名 {
         类型名 成员名;
         ....
    };

1.2定义结构体变量
   
    方法1:
    struct 结构体类型名 {
    类型名 成员名;
    ...
    } 变量名;
    方法2:
    struct 结构体类型名 变量名;
    结构体类型可以嵌套,一结构体类型包含其他结构体类型。
    成员名可以和结构体变量名相同。

1.3结构体变量的引用
    
    定义:结构体变量名.成员名

    规则:
        1.不能将结构体变量作为一个整体进行赋值,输出;只能对结构体中的各个成员分别进行,允许类型相同的结构体变量相互赋值。
        2.如有嵌套定义,用若干引用运算符。
        3.结构体成员变量可以像普通变量一样使用运算(使用形式不同)。

1.4结构体变量的初始化

    1.定义时初始化
        struct 结构体类型 {
        ....
        } 变量名= {
        ...
        };
    2.先定义,再赋值
        struct 结构体类型 {
        ....
        } 变量名;
        变量名 = {.....};
1.5结构体数组
 
    数组中每个元素都是一个结构体类型的数据
    定义:
        struct student stu[m];
    初始化:
        struct student stu[3] = {{...},{...},{...}};

1.6结构体指针

    结构体指针就是该变量所占据的内存段的起始地址
    定义:
        struct student *p, stu;
        p = &stu;
    引用:
        (*p).name;
    或
        p->name;
    ->称为“指向运算符”。

1.7结构体数组指针

    定义:
        struct student *p, stu[3];
        p = stu;

1.8用结构体变量和指向结构体指针作函数参数

2共用体
    使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
2.1   定义:
        union union_name {
        ....
        }variable_names;
    共用体与结构体异同:
    共用体变量所占的内存长度等于最长的成员的长度。
    结构体变量所占的内存长度等于各成员所占内存长度之和。

2.2 共用体变量引用

    先定义,后引用,而且不能引用共用体变量,而只能引用共用体变量中的成员。如
        union {
            int i;
            char ch;
            float f;
       }a, b, c;
        void main()
        {
            printf(FORMAT,a.i);           //只能引用共用体变量的成员,不能直接引用共用体变量。且每一瞬时只有
        }                                    一个成员起作用(“共用”的含义,最后一次存放的成员起作用)。

    共用体变量和它的成员的地址都是同一地址;
    不能使用共用体变量做函数参数,也不能用作函数返回值,但可以使用指向共用体变量的指针;
    共用体和结构体可以相互作为成员,也可以定义共用体数组。

3.枚举类型

    如果一个变量只有几种可能的值,可以定义为“枚举变量”。所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值得范围内
    声明:
        enum weekday {
            sun, mon, tue, wed, thu, fri, sat            //枚举元素或枚举常量,不是变量,不能对其赋值;按定义是
        };                                               的顺序使他们的值为0,1, 2 ....
           声明枚举变量
        enum weekday workday, week_end;
        workday = mon;
        week_end = (weekday)2;
        week_end = (weekday)(5-3);
    枚举元素的值可在定义时由程序员指定,如:
        enum weekday {
        sun=7, mon = 1, tue, wed, thu, fri, sat 
        }workday, week_end;
        以后顺序+1,sat为6。
    枚举元素可以用来做判断比较,如
        if(workday == mon)...
    
4.用typedef定义类型

    4.1用typedef声明新的类型名
    typedef int INTEGER;
    可以使用INTEGER定义新的整形变量
    INTEGER i, j;
    4.2声明结构体类型:
    typedef struct {
    int month;
    int day;
    int year;
    }DATE;
    DATE brithday;
    DATE *p;
    4.3声明数组
    typedef int NUM[100];
    NUM n;                    //声明n为整型数组变量
    4.4 声明指针
    typedef char *STRING;
    STRING p, s[10];          //p为字符型指针变量,s为指针数组
    4.5 声明函数指针
    typedef int (*POINTER)();
    POINTER p1, p2;           //声明POINTER为指向函数的指针类型,该函数返回整型值。p1,p2为POINTER类型的指针。

    归纳起来,声明一个新类型名的方法是:
        1.先按定义变量的方法写出定义体(如:int i;)
        2.将变量名换成新类型名(如:将i换成COUNT)
        3.在最前面加typedef(如:typedef int COUNT;)
        4.然后可以用新类型名定义变量

    说明:
        1.用typedef可以声明各种类型名,但不能用来定义变量。
        2.用typedef只是对已存在的类型增加一个类型名,而没有创造新的类型
        3.typedef与#define相似处:
            #define是在预编译的处理的,它只能做简单的字符串变换
            typedef是在编译的时候处理的
        4.当不同源文件用到同一类型数据时,常用typedef声明一些数据类型,把他们放在一个文件中,然后通过#include引用
        5.使用typedef有利于程序的通用和移植

阅读(2428) | 评论(0) | 转发(0) |
0

上一篇:IT程序员技术提高练级的终极攻略

下一篇:没有了

给主人留下些什么吧!~~