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