在C語言編程中,我們其實可以打開編程語言的拘束,自己定義自己想要的數據類型。只要記住 struct 和 typedef 兩個關鍵詞,我們就可以通過C語言中的數據結構和共用體來保存非同質化的數據類型。
定義新的數據類型
首先,在C語言在線編譯器中輸入以下代碼:
typedef struct student_structure {
char* name;
char* surname;
int year_of_birth;
} student;
完成後,這段代碼會把 student 預存為保留詞,那樣我們能創建 student 類型的變量了。
那麼這個新變量究竟是怎樣構成的呢?
我們所創建的這個結構化新變量是通過一系列基礎變量組成的。在上面的代碼中,我們把 char name、char surname 這些變量組成了新的 student 變量中,其實就是放到內存塊的一個名下。
使用新數據類型
我們現在創建好新的 student 變量後,可以在C語言在線編譯器中為它初始化一些屬性:
student stu;
strcpy(stu.name, "John");
strcpy(stu.surname, "Snow");
stu.year_of_birth = 1990;
printf("Student name : %s\n", stu.name);
printf("Student surname : %s\n", stu.surname);
printf("Student year of birth : %d\n", stu.year_of_birth);
在上面的例子中,眼尖的你可能已經發現了我們需要為新數據類型的所有變量分配一個值。除了使用 stu.name 來訪問外,我們還可以使用更短的方式來為這些結構分配值:
typedef struct {
int x;
int y;
} point;
point image_dimension = {640,480};
你也可以使用不同的順序來設定值:
point img_dim = { .y = 480, .x = 640 };
共用體 vs 結構
共用體(Union)的説明方式與 struct 相同,但他們卻不太一樣。在共用體中,我們只可以使用同一種類型的數據。像這樣:
typedef union {
int circle;
int triangle;
int ovel;
} shape;
只有在數據類型相同的情況下,才會使用 union。我們可以在C語言在線編譯器中嘗試一下我們的新數據類型:
typedef struct {
char* model;
int year;
} car_type;
typedef struct {
char* owner;
int weight;
} truck_type;
typedef union {
car_type car;
truck_type truck;
} vehicle;
其他小技巧
- 當我們使用 & 運算符為結構創建一個指針時,我們也可以使用特殊的 -> inflix運算符來進行表達。
- 在C語言在線編譯器中,我們甚至可以像基礎的數據類型那樣任意使用我們的新數據類型。
- 我們可以複製或指定 struct 的值,但我們不能對它們進行對比!