Structure and Union Types Structure and Union Types 程程程程 程程程 CCU COMM
Structure and Union TypesStructure and Union Types
程式設計潘仁義
CCU COMM
Structure Type DefinitionStructure Type Definitionstruct
structured data objects, can be defined by users
#define STRSIZ 10
typedef struct {char name[STRSIZ];double diameter; /* diameter in km */int moons; /* number of moons */
double orbit_time, /* years to orbit sun once */rotation_time; /* hours to rotate once */
} planet_t;
int main (){ planet_t current_planet, blank_planet = {“”, 0,0,0,0};
int status = scan_planet(¤t_planet); /* 等會看 */
current_planet = get_planet();print_planet(current_planet);…
Assigning Values to Components Assigning Values to Components of Variable current_planetof Variable current_planet
Function with a Structured Input ParameterFunction with a Structured Input Parameter
Function Comparing Two Structured Values Function Comparing Two Structured Values for Equalityfor Equality
Function with a Structured Output ArgumentFunction with a Structured Output Argument
也可寫成& plnp->diameter,&plnp->moons,& plnp->orbit_time,&plnp->rotation_time);
Data Areas of main and scan_planet during Data Areas of main and scan_planet during Execution of status = scan_planet (¤tExecution of status = scan_planet (¤t_planet);_planet);
Function get_planet Returning a Structured Function get_planet Returning a Structured Result TypeResult Type
Data Type planet_t and Basic OperationsData Type planet_t and Basic Operations
例如 : 課本的 complexFigure 11.10
Parallel Arrays and an Array of StructuresParallel Arrays and an Array of Structures
int id[50];double gpa[50];
struct {int id;double gpa;
} stulist[50];
Union typesUnion types
UnionTo deal with situations in which one needs a data object that can be interpreted in a variety of ways.
typedef union {int wears_wig; /* 載假髮嗎 ?*/char color[20];
} hair_t;
typedef struct {int bald; /* 禿頭嗎 ?*/hair_t h;
} hair_info_t;
Function That Displays a Structure with a Function That Displays a Structure with a Union Type ComponentUnion Type Component
Q & AQ & A
union 可以用 -> 嗎 ?
struct planet_t a, b;a = b; /* 可這麼寫嗎 ? */if(a == b) {} /* 可這麼寫嗎 ? */
(*plnp).name*plnp.nameplnp->name&plnp->name
小心: union 的內容該如何解釋 ?