1. 程式人生 > 其它 >【筆記】【C語言】第九章 使用者自己建立資料型別

【筆記】【C語言】第九章 使用者自己建立資料型別

9.1 定義和使用結構體變數

9.2 使用結構體陣列

9.3 結構體指標

9.4 用指標處理連結串列

9.5 共用體型別

9.6 使用列舉型別

9.7 用typedef宣告新型別名

9.1 定義和使用結構體變數

(1)

  結構體:使用者自己建立的,由不同型別資料組成的組合型的,資料結構。

  結構體是派生的資料型別,使用其他型別的物件來構造結構體。

(2)宣告:

  建立結構體型別,其中並無具體資料,系統也不對他分配儲存空間。

strcut 結構體名 
{
    成員列表
};

示例:

strcut Student
{
    int num;
    char name[20];
    
char sex; int age; float score; char address[30]; };
View Code

(3)定義:

  先宣告結構體型別,再定義該型別變數。

struct node a,b;

(4)初始化:

  ①給全員賦初值:

struct node
{
    int num;
    char name[20];
    struct date
    {
        int year,month,day;
    }birthday;
    float score;
}student = { 101, "WH" ,1982,5,21
,80 };

  ②部分成員賦初值

}student = { 101, "WH" };

(5)引用:

  結構體成員運算子:.

  結構體指標運算子:->

student.name
student -> name  //等價於 (*student).name 

(6)注意事項:

  • 一個結構體的成員,可以屬於另一個結構體型別。
  • 也可以不指定結構體名,而直接定義結構體型別變數。
    • 一般形式為: struct {成員列表} 變數名列表;
  • 結構體型別 ≠ 結構體變數
    • 只能對變數賦值、存取和運算,不能對型別。
    • 型別不分配空間,只對變數分配空間。
  • 結構體型別中的成員名,可以與程式中的變數名相同,但二者代表的物件不同。
  • 域:結構體變數中的成員。

9.2 使用結構體陣列

(1)一般形式:

struct 結構體名 
{
    成員列表
} 陣列名[陣列長度]; 

結構體型別 陣列名[陣列長度]; 

 9.3 結構體指標

(1)為了方便和直觀,C中允許將(*p).num 用 p->num來替代

struct node
{
    int num; 
};
struct node student; 
struct node *p;
//以下三個表示式相同 
student.num 
(*p).num
p -> num 

(2)用 結構體變數 和 結構體變數的指標 作函式引數

  作用:將一個結構體變數的值 傳遞給 另一個函式。

  方法:

  1. 用 結構體變數 的成員 作引數。
  2. 用 結構體變數 作實參。 //比較佔空間
  3. 用 指向結構體變數的指標 作實參。

(3)例如:

#include<stdio.h>

struct node
{
    int num;
    char name[20];
    float score[3];
    float ave;
};

int main
{
    void input( struct node stu[] );
    struct node max( struct node stu[] );
    void print( struct node stu[] );
    
    struct node stu[3];
    struct node *p = stu;
    
    input(p);
    print(max(p));
    
    return 0;
}

  

9.4 用指標處理連結串列

9.5 共用體型別

9.6 使用列舉型別

9.7 用typedef宣告新型別名