目录
【1】结构体
【2】typedef
【3】结构体数组
【4】结构体指针
【5】结构体大小
【6】共用体
【7】枚举
【8】存储类型
【1】结构体
1. 定义:
结构体就是一种用户自定义的新数据类型,在结构体中可以包含若干个相同数据类型或不同数据类型的成员变量,组合在一起进行描述
2. 格式:文章来源:https://www.toymoban.com/news/detail-565185.html
struct 结构体名
{
数据类型 变量1;
数据类型 变量2;
...
};
例:
struct student
{
int id;
float score;
};
3. 结构体变量:
定义格式:struct 结构体名 变量名;
1)先定义结构体,后定义变量
struct student
{
int id;
float score;
};
struct student stu;
2)在定义结构体的同时定义结构体变量
struct student
{
int id;
float score;
}stu;
3)缺省结构体类型名进行定义
struct
{
int id;
float score;
}stu;
4. 赋值:
1)定义的同时用{}赋值
struct student
{
int id;
float score;
};
struct student stu={1,98.6};
2)先定义,后复制,需要对每个成员变量单个赋值
struct student
{
int id;
float score;
};
struct student stu;
stu.id = 1;
stu.score=56.3;
3)点等法赋值
struct student
{
int id;
float score;
};
struct student stu={
.id = 1,
.score=55,
};
5. 访问成员变量:
通过.进行访问:结构体变量名.成员变量名
练习:
创建一个名为student的结构体,包含姓名,学号,班级,分数,(数据类型自己定义),从终端输入学生的信息并打印。
#include<stdio.h>
struct student
{
char name[32];
int id;
int class;
float score;
};
int main(int argc, char const *argv[])
{
struct student stu;
scanf("%s %d %d %f",stu.name,&stu.class,&stu.id,&stu.score);
printf("%s %d %d %.2f\n",stu.name,stu.class,stu.id,stu.score);
return 0;
}
【2】typedef
1)定义结构体同时重定义
typedef struct student
{
char name[32];
int id;
int class;
float score;
}STU;
STU stu;//定义一个结构体变量stu
2)先定义结构体,后重定义
struct student
{
char name[32];
int id;
int class;
float score;
};
typedef struct student STU;
STU stu1;
【3】结构体数组
1. 格式:
1)定义结构体的同时定义结构体数组
struct student
{
char name[32];
int id;
int class;
float score;
}stu[5];
2)先定义结构体后定义
struct student
{
char name[32];
int id;
int class;
float score;
};
struct student stu[5];
2. 赋值:
1)定义数组同时赋值
struct student
{
char name[32];
int id;
};
struct student stu[2]={{“lisa”,1},{"yaya",2}};
2)先定义后赋值,需要对每个结构体元素的成员变量单独赋值
struct student
{
char name[32];
int id;
};
struct student stu[2];
stu[0].id=1;
strcpy(stu[0].name,"lisa");
结构体数组大小:sizeof(struct 结构体名) *个数
【4】结构体指针
1. 概念:
指向结构体变量的指针
2. 格式:
struct 结构体名 * 指针名;
struct student
{
int id;
float score;
}stu1;
struct student * p = &stu1;
3. 赋值:
指针名->成员变量名
p->id = 1;
p->score = 96.5;
4. 大小:
sizeof(p)=4,本质是指针
总结:
1. 不能将一个结构体变量作为一个整体来使用,只能对结构体变量中的各个成员变量分别使用
2. 如果成员变量又属于另一种结构体类型,则要用若干成员运算符(.)一级级找到最低级的成员
3. 对于成员变量的操作可以和其他普通变量一样进行各种运算
4. 在数组中,数组是不能彼此赋值的,但是结构体变量可以
【5】结构体大小
sizeof(struct 结构体名)
struct std
{
char b;
short c;
double d;
};
1)字节对齐原则
找结构体成员最大数据类型和4进行比较,按照字节数小的为单位开辟空间
2)节省空间原则
减少空间浪费
【6】共用体
1. 格式:
union 共用体名
{
成员列表;
};
2. 定义共用体变量:
union 共用体名 共用体变量名;
union value
{
int a;
char ch;
};
union value val;
val.a = 1;
val.ch = 'a';
3. 特性:
1) 共用体所有成员变量共用一块地址空间
2) 赋值以最后一次赋值为实际数据
3) 共用体的大小成员中类型最大的数据的大小
【7】枚举
1. 定义:
一种用户自定义数据类型,用来声明一组常数
2. 格式:
enum 枚举类型名
{
valuename1,
valuename2,
.....
};
注意:枚举没有赋初值为0,后面依次加1文章来源地址https://www.toymoban.com/news/detail-565185.html
【8】存储类型
1.auto 自动型 用来修饰局部变量,默认省略
2.static 静态型,可以修饰变量和函数
修饰变量:
1.变量的存放位置在静态区(全局区)
2.生命周期为整个程序
3.限制作用域:
修饰局部变量,和普通局部变量作用域没有区别,但是可以延长生命周期
修饰全局变量,限制在本文件中使用
4.只初始化一次,未赋初值时为0
修饰函数:
static修饰的函数只能在本文件中使用
3.extern 外部引用
通过extern引用其他文件的全局变量或函数
4.register 寄存器类型
由于寄存器数量比较少,在申请不到空间时和auto一样
到了这里,关于复习第八课 C语言-结构体,其他的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!