概述
C语言中包含short、int、long、char、float、double这六中基本数据类型。当然还有构造类型、指针类型、和空类型。如图所示:
今天,我们着重总结一下构造数据类型中的结构体 (关键字:struct,不能省略) 的相关知识。
1.什么是结构体?
结构体是一种工具,用这个工具可以定义自己的数据类型。同时,从上图可以看出结构体属于构造数据类型。
2.结构体与数组的比较
(1)都由多个元素组成
(2)各个元素在内存中的存储空间是连续的
(3)数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同
3.结构体的定义和使用
(1)一般形式
struct 结构体名 {
类型名1 成员名1; //成员类型可以是基本类型或构造型
类型名2 成员名2;
...
类型名n 成员名n;
}; //注意不要忘记此处的;
例如,我们要表示一个学生的个人基本信息。如 姓名、性别、年龄、分数等基本信息,我们则可以如下定义:
struct Student{
char name[10];
char sex;
int age;
float score;
};
(2)定义结构体类型的变量、指针变量和数组
定义结构体类型变量有以下三种方法,本人比较喜欢第三种。
方法一:定义结构体类型时,同时定义该类型的变量
struct [Student] { /*[]表示结构体名是可选的*/
char name[10];
char sex;
int age;
float score;
}stu1,*ps,stu[5]; /*定义结构体类型的普通变量,指针变量和数组*/
方法二:先定义结构体类型,再定义该类型的变量
struct Student { /*[]表示结构体名是可选的*/
char name[10];
char sex;
int age;
float score;
};
struct Student stu1,*ps,stu[5]; /*定义结构体类型的普通变量,指针变量和数组*/
方法三:用类型定义符typedef先给结构体类型名别名,再用别名定义变量
typedef struct [Student] {
char name[10];
char sex;
int age;
float score;
}Stu;
Stu stu1,*ps,stu[5]; /*用别名定义结构体类型的普通变量,指针变量和数组*/
说明:
结构体类型与结构体变量概念不同。
1.类型:不分配内存;变量:分配内存;
2.类型:不能赋值、存取、运算;变量:可以;
3.结构体可以嵌套;
4.结构体成员名与程序中变量名可相同,不会混淆。
例如:
struct date{
int month;
int year;
};
struct student{
int num;
char name[20];
struct date birthday; /*结构体可嵌套*/
}Stu;
(3)给结构体变量赋初值
一般格式:结构体类型 结构体变量名 = {初始表值};
方法一:
struct [Student] {
char name[10];
char sex;
int age;
float score;
}stu[2]={{"ZhangSan",'F',22,90},{"Su",'M',20,85}};
方法二:
struct student{
char name[10];
int age;
float score[5],ave;
};
struct student Stu = {"ZhangSan",22,99,78,99,76,88};
注:ANSI C允许两个相同结构的结构体变量直接赋值
struct student li,zhang = {"zhang",20,92,90,98,67,0};
li=zhang; //将zhang对象拷贝一份赋值给li
/*但 li = {"li",19,76,56,90,69,80};是非法的*/
(4)引用结构体变量中的成员
a.结构体变量名·成员名:stu1.name
b.结构体指针变量—>成员名:ps—>name
c.(*结构体指针变量).成员名:(*ps).name
d.结构体变量数组名.成员名:stu[0].name
注:1.求结构体类型数据的字节数
sizeof(变量名或类型名);
2.嵌套结构体中成员的引用
结构体嵌套时,逐级引用
struct student{
int num;
char name[20];
struct date{
int month;
int day;
int year;
}Birthday;
}stu1,stu2;
//给出生日期的年份赋值
stu1.Btrthday.year = 1999;
4.结构体指针变量的定义和引用
1.结构体指针变量的定义
定义形式:struct 结构体名 *结构体指针名;
struct student *p; //此时指针变量*p中存放的是----结构体变量在内存的起始地址
//例:
struct student{
int num;
char name[20];
char sex;
int age;
}Stu;
struct student *p = &Stu;
2.结构体指针变量的引用
使用结构体指针变量引用成员形式
(*结构体指针变量名).成员名 <=> 结构体指针变量名—>成员名 <=> 结构体变量名.成员名(<=>是等价符号哈,各位看官莫慌=_=!)
例:
int n;
int *p = &n;
*p = 10; <=> n = 10;
struct student{
long int num;
char name[20];
char sex;
float score;
}Stu1;
struct student *p = &Stu1;
Stu1.num = 10; <=> (*p).num = 101; <=>p —>num = 101;
5.用结构体类型和基本数据类型的定义变量的对比
注:感谢博主 I come,I conquer 的博文帮助,附上原文地址:https://www.cnblogs.com/JCSU/articles/1487302.html
最后
以上就是大胆篮球为你收集整理的C语言结构体学习总结的全部内容,希望文章能够帮你解决C语言结构体学习总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复