c语⾔结构体的定义和使⽤
⼀、什么是结构体
在实际问题中,⼀组数据往往具有不同的数据类型;例如在学⽣信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能⽤⼀个数组来存放。
在C语⾔中,可以使⽤结构体(Struct)来存放⼀组不同类型的数据。结构体(struct)指的是⼀种数据结构,是C语⾔中聚合数据类型(aggregate datatype)的⼀类。结构体可以被声明为变量、指针或数组等,⽤以实现较复杂的数据结构。结构体同时也是⼀些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员⼀般⽤名字访问。
定义结构体的⼀般形式为:
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;//学号
c语言char的用法char sex;//性别
float score;//成绩
} stu1, stu2;
如果只需要 stu1、stu2 两个变量,也可以不写结构体名字:
struct{//没有写 stu
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编程,⼤部分结构体都是这样定义的。
typedef和#define⽤法不同,甚⾄可以结合起来灵活使⽤,使⽤时⼀定要注意两者的不同之处。
三、成员的获取和赋值
在C语⾔中,使⽤点号.来获取结构体中的⼀个成员,⼀般格式为:
结构变量名.成员名
例如:
stu1.name;//第⼀个学⽣的姓名
stu2.score;//第⼆个学⽣的成绩
获取成员后,就可以对该成员进⾏赋值了,例如:
stu1.name = “Tom”;
stu2.score = 90.5;
除了可以对成员进⾏逐⼀赋值,也可以像数组⼀样整体赋值,例如:
struct stu{
char*name;//姓名
int num;//学号
char sex;//性别
float score;//成绩
} stu1, stu2 ={"Tom",10,'M',90};
不过整体赋值仅限于上⾯这样的情况,也就是定义结构体的同时声明变量。下⾯的写法是错误的:
stu2 ={"Tom",10,'M',90};
⼀个完整的⽰例:
#include<stdio.h>
#define STU struct stu
int main(){
STU{
char*name;//姓名
int num;//学号
char sex;//性别
float score;//成绩
};
STU stu1;
stu1.name ="James Bond";
stu1.num =1;
stu1.sex ='M';//⽤M表⽰男性,W表⽰⼥性
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); return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论