結構體數據類型詳解

1.結構體類型的定義

struct 結構體類型名
{
成員說明列表(類型符 成員名;)
};

例:struct student
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮點型
char addr[40];//數組類型
       };
       上例說明結構體類型struct student 有6個成員,分別命名爲num,name,sex,age,score和addr。這6個成員分別表示學生的學號、姓名、性別、年齡、成績和家庭住址,顯然它們的類型是不同的。
注:結構體類型可以嵌套定義,既一個結構體類型中的某些成員又是其他結構體類型。但是這種嵌套不能包含自身,既不能由自己定義自己。

2.結構體類型變量

2.1結構體類型變量的定義

    要定義一個結構體類型的變量,可以採取以下3種方法。
    1.先定義結構體類型,再定義結構體變量

    如上面已經定義了一個結構體類型 struct student,可以用它來定義變量。例如:
       struct student stud1,stud2;
    定義stud1和stud2爲 struct student 類型變量, 即它們是具有 struct student 類型的結構體變量。

    爲了使用方便,人們通常用一個符號常量代表一個結構體類型。在程序開頭,加上命令:
     #define STU_TYPE struct student
    這樣在程序中,STU_TYPE與struct student完全等效。
例:   STU_TYPE
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮點型
char addr[40];//數組類型
       };
     然後就可以直接用STU_TYPE定義變量。例如:STU_TYPE stud1,stud2;
     
     2.在定義結構體類型的同時定義結構體變量

   這種定義方法的一般形式爲:
struct 結構體類型名
{
成員說明列表(類型符 成員名;)
}變量名列表;

例:   struct student
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮點型
char addr[40];//數組類型
       }stud1,stud2;
     它的作用與前面定義的相同。即定義了兩個struct student 類型的變量stud1和stud2。
     
     3.直接定義結構體類型變量

     這種定義方法的一般形式爲:
struct 
{
成員說明列表(類型符 成員名;)
}變量名列表;

         注意:即在結構體定義時不出現結構體類型名,這種形式雖然簡單,但不能在需要時,使用所定義的結構體類型。

2.2結構體類型變量的使用

    引用一個結構體變量有兩種方式:通過結構體變量名和通過指向結構體的指針變量。與之對應的,引用結構體成員的標記形式有兩種,分別用運算符“.”和“->”來標記。
    (1)由結構體變量名引用其成員的標記形式爲: 

結構體變量名.成員名    
        例如:stud.num = 20312;
 
    (2)由指向結構體的指針變量引用結構體成員的標記形式爲:

指針變量名->成員名
例如:struct node
      {
  float x,y;
       }p,u,*pt;

          pt->x=23.7,pt->y=3.4
(3)初始化結構體
例如:struct student jack={
.name = "jack",
.num = 2012013822;
.age = 18;
.sex = "男";
   };

1.結構體與函數實例

        例:有一個結構體變量stu,內含學生學號、姓名和3門課的成績。要求在main函數中給變量賦值,在另一個函數print中將它們打印輸出。


<span style="font-size:18px;">struct student
{
	long num;
	char name[20];
	float score[3];
}

void main()
{
	void print(struct student *);
	struct student stu;
	stu.num = 3021210;
	strcpy(stu.name,"LI Dong");
	stu.score[0] = 67.5;
	stu.score[1] = 89;
	stu.score[3] = 78.6;
	print(&stu);
}

void print(struct student *p)
{
	printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
	printf("\n");
}</span>

程序運行結果如下:
3021210
Li Dong
67.500000
89.000000
78.599998



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章