struct                   Structure Data Type
 
    A structure is an aggregate data type. It allows multiple data
    objects to be grouped together and named using a structure tag. Each
    object in a structure is called a member and may have any data type,
    including other structures and unions.
 
    A special member is the bit field. A bit field is an object whose
    size is measured in bits rather than bytes or words. Bit fields are
    useful for mapping into hardware registers and memory locations, and
    for packing binary flags into bytes or words without using the bit-
    wise operators |, & and ^.
 
    To define the layout of a structure, optionally give that layout a
    tag name, and to define variables of that type, use the following
    format:
 
            struct [tag] {
                 member-1 declaration;
                 ...
                 member-n declaration;
            } [declarator [, declarator ... ]] ;
 
The format of a bit field declaration is:
 
            type [identifier] : field-width;
 
    Once a structure layout has been defined, it may be referenced in
    subsequent declarations using the format:
 
            struct tag declarator [, declarator ...] ;
 
    In either case, the declarator may contain an initializer list.
 
    When members are referenced, they must be qualified by their parent
    structure name as in:
 
            struct_name1.member_name1 = value1;
            struct_name2.member_name2 = value2;
 
    and since structures may be nested, the general naming format
    becomes:
 
            level-1.level-2. ... .member
 
      Notes:    If a structure layout has no tag, it cannot be referenced
                in subsequent (and separate) declarations, casts, or
                function definitions.
 
                Structures may be nested and may contain members of any
                data type. A structure may not contain an instance of
                itself; it may, however, contain a pointer to a structure
                of the same type, something commonly done in defining
                linked-list nodes.
 
                Structures with different tag names define different data
                types, even if their layouts are identical. That is, such
                structures are not assignment-compatible and should not
                be copied to or compared with each other. If you really
                mean two structure types to be the same, make them the
                same. This also applies to structures without tags.
 
                Each structure has its own identifier namespace; a struct
                tag must be distinct from other enum, struct, and union
                tags.
 
                A structure may be assigned to using the assignment
                operator =. A structure may be passed by value to
                functions, and returned by value from functions.
 
                A structure of class auto may not have an initializer
                list.
 
  -------------------------------- Example ---------------------------------
 
           struct date {
               int year;
               int month;
               int day;
           } todays_date = {87, 5, 1};
 
           struct date birth_date, *adate, dates[100];
               date = (struct date) malloc(10 * sizeof(struct date));
 
 
           /* Asynch communications adapter line control register */
 
           struct lcreg {
               unsigned int word_length   : 2;
               unsigned int stop_bits     : 1;
               unsigned int parity_enable : 1;
               unsigned int even_parity   : 1;
               unsigned int stick_parity  : 1;
               unsigned int set_break     : 1;
               unsigned int divisor_latch : 1;
           };

Seealso:



This page last updated on Fri Nov 30 10:48:32 MSK 2001
Copyright © 1992-2001, Vitaly Filatov, Moscow, Russia
Webmaster