天天看點

C++自定義資料類型之結構

       結構

       結構是數目固定的不同資料類型的若幹變量的集合。實際上,結構也可以是相同變量的集合。

       定義結構變量應先定義結構,任何一個結構變量都具有某種結構模式。結構模式是結構變量所屬的形式,一個結構模式可以定義若幹個結構變量。

       結構模式的定義格式:

        struct     <結構名>

        {

               <若幹成員說明>(給出每個成員的名字和類型)

         };

        結構變量的定義格式:  

        struct   <結構名>  <結構變量名表>

        例如:

        struct    student

        {

              char    name;

              int     age;

              char     sex;

              struct   date  birthday; (結構變量)

         }c1,*p,a[12];

         struct   date

         {

              int   year,month,day;

         };

        一個結構的結構變量也可以作為另一個結構的成員。而結構的成員是不同的資料類型。結構變量可以是一般的結構變量,也可以是指向結構變量的指針,還可以是結構數組。(結構數組是數組元素為結構變量的數組)

       定義結構變量可以在定義結構模式後單獨定義,也可以在定義結構模式的同時進行定義。上述的結構變量就是在定義結構模式的同時定義結構變量的,來看看分開單獨定義的:

       struct   card

       {

            int   a;

            char   b;

        };

        struct   card   s1,s2,*pi,d[12];

        結構變量成員的表示;

        一般結構變量的成員的表示方法是用運算符“.”将.結構變量名與成員名連接配接起來:

        <結構變量名>.<成員名>    s1.a

        指向結構變量的指針的成員的表示方法是用運算符“->”将指向結構變量的指針名和成員名連接配接起來:

        <結構變量指針名>-><成員名>   pi->b

        指向結構變量的指針的成員的表示方法也可以是:

        (*<結構變量指針名>).<成員名>   (*pi).b

        結構變量的指派:

       1結構變量賦初值:

        結構變量賦初值的方法是使用初始值表,初始值表中給定的資料項的順序應與定義時各成員的順序一緻。

        一般結構變量賦初值:struct  card  c1={1,'s'};

        指向結構變量指針賦初值: struct  card  *pi=&c1;(&c1表示結構變量c1的位址值)

        結構數組賦初值; struct  card  s[2]={{1,'s'},{2,'s'}};

        2結構變量指派:  

         一般結構變量指派:struct.old=23;struct.birthday.day=15;

        指向結構變量指針指派: pi->birthday.year=2017;

        結構數組指派; s[2].name="wang yan";

        在兩個結構變量具有相同的結構模式下還可以将一個結構變量整個指派給另一個結構變量。

        struct  card  c1={1,'s‘},c2;

        c2=c1;

        結構變量的運算:

        結構變量的運算主要是指結構變量成員的運算,結構變量在整體上隻有指派運算。

        寫一個程式:      

#include <iostream.h>
struct student
{
	char *name;
	long stu_no;
	float math;
	float english;
};
void main()
{
	static struct student s1={"Ma jing",99012,89.0,78.5},
		                  s2={"Lu ping",99023,90.0,85.5};
	float m1,m2;
	m1=(s1.math+s1.english)/2;
    m2=(s2.math+s2.english)/2;
	cout<<s1.name<<'\t'<<m1<<endl;
    cout<<s2.name<<'\t'<<m2<<endl;
}
           

輸出的結果:Ma jing  83.75

                      Lu ping  87.75