在c语言中,可以使用结构体(struct)来存放一组不同类型的数据。结构体指的是一种数据结构,是c语言中聚合数据类型(aggregate datatype)的一类。结构体可以被声明为变量、指针或者数组等,用来实现复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(number),且这些成员可以为不同的类型,成员一般用名字访问。
定义结构一的一般形式为:
struct 结构体名{
成员列表
};
在成员表列中可以是几种基本数据类型,也可以是结构体类型。
struct类型名{}变量;后面的分号不能漏掉
例如用结构体来表示学生信息:
struct stu{
char*name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
};
二 结构体变量
结构体也是一种数据结构类型,可以用来说明变量。例如:
struct stu stu1, stu2;
定义了两个变量stu1 和stu2,他们都是stu类型,都有4个成员组成。关键字struct不能少。结构体的各个
成员在内存中是连续存储的。stu1、stu2的内存如下图所示:
也可以在定义结构体的时候同时定义结构变量:
struct stu{
char *name;//姓名
int num;//学号
char sex;//性别
float score;//成绩
}stu1,stu2;
如果只需要stu1,stu2两个变量,也可以不写结构体名字:
struct{
char *name;
int num;
char sex;
float score;
}stu1,stu2;
这样做虽然书写简单,但是因为没有结构体名字,后面就没办法用该结构体定义新的变量。
但是可以使用宏定义,使用一个符号常量来表示一个结构类型,例如:
#define STU struct stu
STU{
char *name;
int num;
char sex;
float score;
};
STU stu1,stu2;
后面我们会学习windows编程,大部分结构体都是这样定义的。
typed和#define用法不同,甚至可以结合起来灵活使用,使用时一定要注意两者的不同之处。
三 成员的获取和赋值在c语言中,使用点号.来获取结构体中的一个成员,一般结构是:
结构变量名。成员名
例如:
stu1.name ="Jake"; stu2.score = 99.9;
除了可以对成员进行注意赋值,也可以像数组一样整体赋值,例如:
struct stu{
char *name; //姓名
int num;//学号
char sex;//性别
float score;//成绩
} stu1,stu2 = { "Jake", 10, 'M', 90 };
不过整体赋值仅限于上面这样的情况,也就是定义结构体的同时声明变量。下面的写法就是错误的:
stu2 = {"Joke", 10, 'M', 90 };
//一个完整的示例:
#include
#define STU struct stu
int main(){
STU{
char *name;
int num;
char sex;
float score;
};
STU stu1;
stu1.name = "Cheng Zi";
stu1.num = 1;
stu1.sex ='M';
stu1.score = 99;
printf("Hello everyone! My name is %s, a naughty boy, but with good scores(%.2f) and top No.(%d)!",stu1.name, stu1.score, stu1.num);
return 0;
}



