结构体的定义
在实际问题中,一组数据往往具有不同的数据类型。但是数组中各元素的类型和长度必须一致,才能便于编译系统处理。所以C语言中给出了另一种构造数据类型——“结构”或叫“结构体”。它相当于其他语言中的记录。
“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。
结构是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它,如同在说明和调用函数之前要先定义函数一样。
结构的声明
定义一个结构的一般形式为:
struct 结构名
{成员列表};
成员列表由若干个成员组成,每个成员都是该结构的一个组成部分,对每个成员也必须作类型说明,其形式为:
类型说明符 成员名;
成员名的命名应符合标识符的书写规定,例如:
struct stu
{
int num;
char *name;
char sex;
float score;
};
结构类型变量的说明
说明结构变量有一下三种方法,以上定义的stu为例来加以说明。
1.先定义结构,再说明结构变量。如:
struct stu
{
int num;
char *name;
char sex;
float score;
};
struct stu boy1,boy2;
2.在定义结构类型的同时说明结构变量。例如:
struct stu
{
int num;
char *name;
char sex;
float score;
}boy1,boy2;
这种形式的说明的一般形式为:
struct 结构名
{
成员列表
}变量名列表;
3.直接说明结构变量。例如:
struct
{
int num;
char *name;
char sex;
float score;
}boy1,boy2;
这种形式的说明的一般形式为:
struct
{
成员列表
}变量名列表;
结构变量的赋值
本程序使用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态的输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2的各个成员值。
int main(){
struct stu{
int num;
char *name;
char sex;
float score;
}boy1,boy2;
boy1.num = 101;
boy1.name = "小明";
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,&boy1.score);
boy2 = boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}
本例表示了结构变量的赋值、输入和输出的方法。
结构变量的使用
struct Student
{
int No;
char *Name;
void Show()
{
printf("我叫%s,学号是%d\n",Name,No);
}
};
struct Math{
int x;
int y;
}
int sum (struct Math math){
return math.x + math.y;
}
void main(){
struct Main math = {10,20};
printf("x=%d,y=%d,sum=%d",math.x,math y,sum(math));
}
运行后结果是
x=10,y=20,sum=30