C语⾔中的struct⽤法
参考⾃
在c语⾔中结构体(struct)跟⾯向对象编程(如java等)⾥⾯的类是⾮常相似的。不过像C++⾥⾯对结构体进⾏了扩展,c++⾥⾯的结构体是可以包含⽅法的,但是C语⾔⾥⾯是不能包含⽅法(函数)的。
结构是由基本数据类型构成的、并⽤⼀个标识符来命名的各种变量的组合。
结构中可以使⽤不同的数据类型。
1. 结构说明和结构变量定义
在Turbo C中, 结构也是⼀种数据类型, 可以使⽤结构变量, 因此, 像其它类型的变量⼀样, 在使⽤结构变量时要先对其定义。
定义结构变量的⼀般格式为:
struct 结构名
{
类型变量名;
类型变量名;
...
} 结构变量;
结构名是结构的标识符不是变量名。 类型为五种数据类型(整型、浮点型、字符型、指针型和 ⽆值型)。
构成结构的每⼀个类型变量称为结构成员, 它象数组的元素⼀样, 但数组中 元素是以下标来访问的, ⽽结构是按变量名字来访问成员的。
下⾯举⼀个例⼦来说明怎样定义结构变量。
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} person;
这个例⼦定义了⼀个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。⽤已说明的结构名也可定义结构变量。这样定义 时上例变成:
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
};
struct string person;
如果需要定义多个具有相同形式的结构变量时⽤这种⽅法⽐较⽅便, 它先作
结构说明, 再⽤结构名来定义变量。
例如:
struct string Liming, Liuqi, ...;
如果省略结构名, 则称之为⽆名结构, 这种情况常常出现在函数内部, ⽤这种结构时前⾯的例⼦变成:
struct
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} Liming, Liuqi;
2. 结构变量的使⽤
结构是⼀个新的数据类型, 因此结构变量也可以象其它类型的变量⼀样赋值、 运算, 不同的是结构变量以成员作为基本变量。
结构成员的表⽰⽅式为:
结构变量.成员名
如果将"结构变量.成员名"看成⼀个整体, 则这个整体的数据类型与结构中
该成员的数据类型相同, 这样就可象前⾯所讲的变量那样使⽤。
下⾯这个例⼦定义了⼀个结构变量, 其中每个成员都从键盘接收数据, 然后
对结构中的浮点数求和, 并显⽰运算结果, 同时将数据以⽂本⽅式存⼊⼀个名为
wage.dat的磁盘⽂件中。请注意这个例⼦中不同结构成员的访问。
例3:
#include <stdio.h>
{
struct{                  /*定义⼀个结构变量*/
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4,wage5;        }a;
FILE *fp;
float wage;
char c=’Y’;
fp="fopen"("wage.dat", "w");
/*创建⼀个⽂件只写*/
while(c==’Y’||c==’y’)
/*判断是否继续循环*/
{
printf("/nName:");
scanf("%s", a.name);    /*输⼊姓名*/
printf("Age:");
scanf("%d", &a.wage);    /*输⼊年龄*/
printf("Sex:");
scanf("%d", a.sex);
printf("Dept:");
scanf("%s", a.depart);
printf("Wage1:");
scanf("%f", &a.wage1);  /*输⼊⼯资*/
printf("Wage2:");
scanf("%f", &a.wage2);
printf("Wage3:");
scanf("%f", &a.wage3);
printf("Wage4:");
scanf("%f", &a.wage4);
printf("Wage5:");
scanf("%f", &a.wage5);
wage=a.wage1+a.wage2+a.wage3+a.wage4+a.wage5;
printf("The sum of wage is %6.2f/n", wage);/*显⽰结果*/
fprintf(fp, "%10s%4d%4s%30s%10.2f/n",  a.name, a.age, a.sex, a.depart, wage); /*结果写⼊⽂件*/
while(1)
{
printf("Continue?<Y/N>");
c="getche"();
if(c==’Y’||c==’y’||c==’N’||c==’n’)
break;
}
}
c语言struct头文件
fclose(fp);
}
3. 结构数组和结构指针
结构是⼀种新的数据类型, 同样可以有结构数组和结构指针。
⼀、结构数组
结构数组就是具有相同结构类型的变量集合。假如要定义⼀个班级40个同学 的姓名、性别、年龄和住址, 可以定义成⼀个结构数组。如下所⽰:
struct{
char name[8];
char sex[2];
int age;
char addr[40];
}student[40];
也可定义为:
struct string{
char name[8];
char sex[2];
int age;
char addr[40];
};
struct string student[40];
需要指出的是结构数组成员的访问是以数组元素为结构变量的, 其形式为:
结构数组元素.成员名
例如:
student[0].name
student[30].age
实际上结构数组相当于⼀个⼆维构造, 第⼀维是结构数组元素, 每个元素是
⼀个结构变量, 第⼆维是结构成员。
注意:
结构数组的成员也可以是数组变量。
例如:
struct a
{
int m[3][5];
float f;
char s[20];
}y[4];
为了访问结构a中结构变量y[2]的这个变量, 可写成
y[2].m[1][4]
⼆、结构指针
结构指针是指向结构的指针。它由⼀个加在结构变量名前的"*" 操作符来定义, 例如⽤前⾯已说明的结构定义⼀个结构指针如下: struct string{
char name[8];
char sex[2];
int age;
char addr[40];
}*student;
也可省略结构指针名只作结构说明, 然后再⽤下⾯的语句定义结构指针。
struct string *student;
使⽤结构指针对结构成员的访问, 与结构变量对结构成员的访问在表达⽅式
上有所不同。结构指针对结构成员的访问表⽰为:
结构指针名->结构成员
其中"->"是两个符号"-"和">"的组合, 好象⼀个箭头指向结构成员。例如要
给上⾯定义的结构中name和age赋值, 可以⽤下⾯语句:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。