C 結構體 (structs)
結構體
結構體(也稱為 struct)是一種將幾個相關變數組合到一個地方的方式。結構體中的每個變數都稱為結構體的成員。
與陣列不同,結構體可以包含許多不同的資料型別(int、float、char 等)。
建立結構體
您可以使用 struct
關鍵字建立結構體,並在花括號內宣告其每個成員
struct MyStructure { // 結構體宣告
int myNum; // 成員(int 變數)
char myLetter; // 成員(char 變數)
}; // 用分號結束結構體
要訪問結構體,您必須建立它的變數。
在 main()
方法中使用 struct
關鍵字,後跟結構體名稱,然後是結構體變數名稱
建立一個名為“s1”的結構體變數
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
return 0;
}
訪問結構體成員
要訪問結構體的成員,請使用點語法(.
)
示例
// 建立一個名為 myStructure 的結構體
struct myStructure {
int myNum;
char myLetter;
};
int main() {
// 建立一個名為 s1 的 myStructure 結構體變數
struct myStructure s1;
// 為 s1 的成員賦值
s1.myNum = 13;
s1.myLetter = 'B';
// 列印值
printf("我的數字: %d\n", s1.myNum);
printf("我的字母: %c\n", s1.myLetter);
return 0;
}
自己動手試一試 »
現在您可以輕鬆地使用一個結構體建立多個具有不同值的結構體變數
示例
// 建立不同的結構體變數
struct myStructure s1;
struct myStructure s2;
// 為不同的結構體變數賦值
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
自己動手試一試 »
結構體中的字串怎麼辦?
請記住,C 中的字串實際上是字元陣列,不幸的是,您不能像這樣為陣列賦值
示例
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // 字串
};
int main() {
struct myStructure s1;
// 嘗試為字串賦值
s1.myString = "Some text";
// 嘗試列印值
printf("我的字串: %s", s1.myString);
return 0;
}
將會發生錯誤
prog.c:12:15: error: 賦值給陣列型別表示式
但是,對此有一個解決方案!您可以使用 strcpy()
函式並將值賦給 s1.myString
,如下所示
示例
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // 字串
};
int main() {
struct myStructure s1;
// 使用 strcpy 函式為字串賦值
strcpy(s1.myString, "Some text");
// 列印值
printf("我的字串: %s", s1.myString);
return 0;
}
結果
我的字串:一些文字
更簡單的語法
您還可以在宣告時在單行中為結構體變數的成員賦值。
只需將值以逗號分隔的列表形式插入花括號 {}
中。請注意,使用此技術時,您不必為字串值使用 strcpy()
函式
示例
// 建立一個結構體
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// 建立一個結構體變數併為其賦值
struct myStructure s1 = {13, 'B', "Some text"};
// 列印值
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
自己動手試一試 »
注意:插入值的順序必須與結構體中宣告的變數型別順序匹配(13 用於 int,'B' 用於 char 等)。
複製結構體
您還可以將一個結構體賦值給另一個結構體。
在以下示例中,s1 的值被複制到 s2
修改值
如果您想更改/修改一個值,可以使用點語法(.
)。
要修改字串值,strcpy()
函式再次派上用場
示例
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// 建立一個結構體變數併為其賦值
struct myStructure s1 = {13, 'B', "Some text"};
// 修改值
s1.myNum = 30;
s1.myLetter = 'C';
strcpy(s1.myString, "Something else");
// 列印值
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
自己動手試一試 »
修改值在複製結構體值時特別有用
示例
// 建立一個結構體變數併為其賦值
struct myStructure s1 = {13, 'B', "Some text"};
// 建立另一個結構體變數
struct myStructure s2;
// 將 s1 的值複製到 s2
s2 = s1;
// 更改 s2 的值
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");
// 列印值
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
自己動手試一試 »
好的,那麼結構體有什麼用呢?
想象一下,您必須編寫一個程式來儲存有關汽車的不同資訊,例如品牌、型號和年份。結構體的優點在於,您可以建立一個單一的“汽車模板”,並將其用於您製造的每輛汽車。請參閱下面的真實示例。
現實生活中的例子
使用結構體儲存有關汽車的不同資訊
示例
struct Car {
char brand[50];
char model[50];
int year;
};
int main() {
struct Car car1 = {"BMW", "X5", 1999};
struct Car car2 = {"Ford", "Mustang", 1969};
struct Car car3 = {"Toyota", "Corolla", 2011};
printf("%s %s %d\n", car1.brand, car1.model, car1.year);
printf("%s %s %d\n", car2.brand, car2.model, car2.year);
printf("%s %s %d\n", car3.brand, car3.model, car3.year);
return 0;
}
自己動手試一試 »