我們可以定義一個(gè)struct來(lái)聲明一個(gè)新的數(shù)據(jù)類型。
我們使用 struct
關(guān)鍵字。
使用struct關(guān)鍵字可以定義一個(gè)稱為單個(gè)單元的結(jié)構(gòu)的各種類型的變量集合。
以下代碼是結(jié)構(gòu)聲明的簡(jiǎn)單示例:
struct Dog { int age; int height; } aDog;
此示例聲明一個(gè)名為Dog的結(jié)構(gòu)類型。
這不是一個(gè)變量名;這是一種新的類型。
此類型名稱稱為結(jié)構(gòu)標(biāo)簽或標(biāo)簽名稱。
Dog結(jié)構(gòu),年齡和高度中的變量名稱稱為成員或字段。
結(jié)構(gòu)的成員出現(xiàn)在跟隨struct標(biāo)簽名稱Dog的大括號(hào)之間。
在該示例中,結(jié)構(gòu)的實(shí)例(稱為aDog)被聲明。
aDog是Dog類型的變量。
aDog包括結(jié)構(gòu)的兩個(gè)成員:成員年齡和成員身高。
以下代碼為結(jié)構(gòu)類型Dog添加更多成員。
struct Dog { int age; int height; char name[20]; char father[20]; char mother[20]; } aDog = { 4, 1, "name", "C", "C++" };
這個(gè)版本有五個(gè)成員的狗結(jié)構(gòu)類型。
在變量aDog的聲明中,出現(xiàn)在最后一對(duì)大括號(hào)之間的值按順序應(yīng)用,到成員變量age(4),height(1),name(“name"),father(“C")和mother(“C ++")。
您可以在單獨(dú)的語(yǔ)句中定義結(jié)構(gòu)類型的結(jié)構(gòu)類型和變量。
struct Dog { int age; int height; char name[20]; char father[20]; char mother[20]; }; struct Dog aDog = { 4, 1,"name", "C", "C++" };
第一個(gè)語(yǔ)句定義結(jié)構(gòu)標(biāo)簽Dog,第二個(gè)是該類型的一個(gè)變量的聲明,aDog。
以下代碼定義了Dog類型的另一個(gè)變量:
struct Dog brother = { 3, 5, "new name", "C", "C++" };
您可以在單個(gè)語(yǔ)句中聲明多個(gè)結(jié)構(gòu)變量。
struct Dog aDog, brother;
您可以在單個(gè)語(yǔ)句中聲明多個(gè)結(jié)構(gòu)變量。...
您可以使用typedef定義刪除struct。
例如:
typedef struct Dog Dog;
這定義了Dog等同于struct Dog。
如果將此定義放在源文件的開(kāi)頭,你可以定義一個(gè)Dog類型的變量,像這樣:
Dog t = { 3, 5, "new name", "C", "C++" };
struct關(guān)鍵字不再需要。
通過(guò)寫變量名稱后跟一個(gè)句點(diǎn)來(lái)引用結(jié)構(gòu)的成員,其次是會(huì)員變量名。
aDog.age = 12;
該期間稱為成員選擇運(yùn)算符。
此語(yǔ)句將aDog引用的結(jié)構(gòu)的age成員設(shè)置為12。
您可以選擇在初始化列表中指定成員名稱,如下所示:
Dog t = { .height = 5, .age = 3, .name = "name", .mother = "C", .father = "C++" };
以下代碼顯示如何定義結(jié)構(gòu)類型,并分配從鍵盤讀取的值以存儲(chǔ)在其中。
#include <stdio.h>
typedef struct Dog Dog; // Define Dog as a type name
struct Dog // Structure type definition
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
};
int main(void) {
Dog my_Dog; // Structure variable declaration
// Initialize the structure variable from input data
printf("Enter the name of the Dog: " );
scanf("%s", my_Dog.name, sizeof(my_Dog.name)); // Read the name
printf("How old is %s? ", my_Dog.name );
scanf("%d", &my_Dog.age ); // Read the age
printf("How high is %s ( in hands )? ", my_Dog.name );
scanf("%d", &my_Dog.height ); // Read the height
printf("Who is %s"s father? ", my_Dog.name );
scanf("%s", my_Dog.father, sizeof(my_Dog.father));
printf("Who is %s"s mother? ", my_Dog.name );
scanf("%s", my_Dog.mother, sizeof(my_Dog.mother));
// Now tell them what we know
printf("%s is %d years old, %d hands high,", my_Dog.name, my_Dog.age, my_Dog.height);
printf(" and has %s and %s as parents.\n", my_Dog.father, my_Dog.mother);
return 0;
}
上面的代碼生成以下結(jié)果。
為了說(shuō)明,我們定義新的數(shù)據(jù)類型,稱為employee。
#include <stdio.h>
// define a struct
struct employee{
int id;
char name[10];
char country[5];
};
int main() {
// declare struct variable
struct employee emp;
// set values
emp.id = 10;
sprintf(emp.name,"jane");
sprintf(emp.country,"DE");
// display
printf("id: %d, name: %s, country : %s\n",emp.id,emp.name,emp.country);
return 0;
}
上面的代碼生成以下結(jié)果。
以下代碼顯示如何創(chuàng)建結(jié)構(gòu)數(shù)組。
#include <stdio.h>
#include <ctype.h>
typedef struct Dog Dog; // Define Dog as a type name
struct Dog // Structure type definition
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
};
int main(void)
{
Dog my_Dogs[3]; // Array of Dog elements
int hcount = 0; // Count of the number of Dogs
char test = "\0"; // Test value for ending
for(hcount = 0 ; hcount < sizeof(my_Dogs)/ sizeof(Dog) ; ++hcount)
{
printf("Do you want to enter details of a%s Dog (Y or N)? ", hcount ? "nother" : "" );
scanf(" %c", &test, sizeof(test));
if(tolower(test) == "n")
break;
printf("Enter the name of the Dog: " );
scanf("%s", my_Dogs[hcount].name, sizeof(my_Dogs[hcount].name));
printf("How old is %s? ", my_Dogs[hcount].name );
scanf("%d", &my_Dogs[hcount].age);
printf("How high is %s ( in hands )? ", my_Dogs[hcount].name);
scanf("%d", &my_Dogs[hcount].height);
printf("Who is %s"s father? ", my_Dogs[hcount].name);
scanf("%s", my_Dogs[hcount].father, sizeof(my_Dogs[hcount].father));
printf("Who is %s"s mother? ", my_Dogs[hcount].name);
scanf("%s", my_Dogs[hcount].mother, sizeof(my_Dogs[hcount].mother));
}
// Now tell them what we know.
printf("\n");
for (int i = 0 ; i < hcount ; ++i) {
printf("%s is %d years old, %d hands high,", my_Dogs[i].name, my_Dogs[i].age, my_Dogs[i].height);
printf(" and has %s and %s as parents.\n", my_Dogs[i].father, my_Dogs[i].mother);
}
return 0;
}
上面的代碼生成以下結(jié)果。
更多建議: