C语言基础七——结构体

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<Windows.h>
#include<string>

//复制全文粘贴至编译器,根据编译器类型对预处理进行修改

//什么是结构体?
//用户自己建立的数据类型
//1.结构体声明
//struct 结构体类型名{成员列表};
//struct student
//{
// int ID;
// char name[10];
//};
//2.结构体定义
//struct student s1;//结构体定义,C++中可直接使用 student s1;
//struct student
//{
// int ID;
// char name[10];
//}s1;//声明结构体student并定义student类型的变量s1
//3.不定义结构体名称,直接定义该结构体类型的变量
//struct
//{
// int ID;
// char name[10];
//}s1,s2;
//4.结构体初始化
//struct
//{
// int ID;
// char name[10];
//}s1={123,“李白”},s2;
//5结构体变量和成员的应用
//s2=s1;//同类型结构体可以相互赋值
//printf("%d\n",s10.ID);//结构体变量.成员名:引用结构体成员(输出结果为123)
//6 typedef用于给数据类型关键字取别名
//typedef int INT;//给int别名INT,之后可用INT定义整型
//typedef struct student //此处的student可以省
//{
// int ID;
// char name[10];
//}s;//给struct student取别名s,也可以用student
//用一个结构体做另一个结构体的成员
//typedef struct
//{
// struct student s;
// int ID;
// char name[10];
//}teacher;
//teacher.s.ID;//引用

代码实现:

typedef struct student
{
int ID;
char name[10];
}student;
typedef struct
{
struct student s;
int ID;
char name[10];
}teacher;
int main()
{
student s1;
s1.ID = 12;
strcpy(s1.name,"李白");
teacher t1 = { s1, 12, "王" };
puts(t1.s.name);
//结构体数组(用法同数组)
student S[3], S1[3] = { { 12,"李白" } };//数组定义及初始化赋值
S[0] = S1[0];//赋值
printf("%d\n", S[0].ID);//数组元素的引用
//共用体——用一段内存存储多种类型的数据
//union 共用体名
//{
// 成员列表
//}//共用体可看作特殊的结构体,定义和初始化方法与结构体相同,不同点在于一个共用体变量只有一个有效成员
typedef union date
{
int a;
double b;
char c[10];
}date;
date num1;
num1.a = 10;
num1.b = 12.1;
printf("%d\t%f\n", num1.a, num1.b);//共用体中只有一个成员有效,重复定义以最后一次为准,此处num.1输出乱码,num.2正确输出
//结构体与共用体所占内存
printf("%d\n", sizeof(student));//ID占4字节,name[10]占10字节;4+10<4*4(理论字节<成员中最长的基本数据类型*n);故student占16字节
printf("%d\n", sizeof(date));//a占4字节,b占8字节,c占10字节;10<8*2(最长成员<成员中最长的基本数据类型*n);故date占16字节
//枚举类型——变量取值受限的整型数据类型
//emum 类型名{枚举元素列表};//枚举元素列表为该枚举类型的值域
enum Weekday{sun,mon,tue,wed,thu,fri,sat};//定义枚举类型Weekday;定义基本方法和结构体相同
enum Weekday today = sun;
printf("%d\n", today);//每一个枚举元素都代表一个整数,C语言编译器按照定义时的顺序默认它们的值为0,1,2,3,4,5,6……。
//可以人为指定枚举元素的数值
//enum Weekday{ sun=5, mon=6, tue=7, wed=8, thu=1, fri=2, sat=3 };
//枚举类型可以进行比较和判断
if (today == sun)
printf("today is Sunday\n");
system("pause");
return 0;
}

posted @ 2021-01-08 12:16  初学者(another)  阅读(213)  评论(0)    收藏  举报