1、结构
结构是一个或多个变量的集合,该集合有一个单独的名称,便于操作。与数组不同,结构可以储存不同类型的变量。结构中的变量被称为结构的成员。在进行实例化之后我们就可以对其内部变量(成员)进行赋值操作。
#include<stdio.h>
int main()
{
/*struct student
{
int number; 注释内部被称为结构的声明和定义,我们在这里声明里一个为student的
char *name; 结构,其中包括一个整型number来存储学生的学号name来存储学生的名字 。
}*/
struct student
{
int number;
char *name;
} student_1,student_2;
/*
student_1,student_2; 这两行都是对结构的实例化,实例
struct student student_3; 化之后我们可以对其进行操作 .
*/
struct student student_3;
student_1.number=20902134;
student_1.name="曹家先";
printf("%d %s",student_1.number,student_1.name);
student_3.number=20903124;
student_3.name="李老二";
printf("\n%d %s",student_3.number,student_3.name);
return 0;
}
2、联合
联合与结构类似,它的声明方式与结构相同,联合和结构不同的是,同一时间内只能用一个联合成员。因为他的每一个成员都存储在相同的位置上,其分配内存大小可以容纳所需内存最大的成员。
#include<stdio.h>
int main()
{
union student
{
char *name;
int number;
}student;
student.name="李老二";
printf("%s",student.name);
student.number=20903125;
printf("%d",student.number);
printf("\n%d",student.name);//studeng.name内的数据已经变成20903125
return 0;
}
3、typedef
使用typedef关键字可以创建结构或联合类型的别名。
#include<stdio.h>
int main()
{
typedef struct
{
int number;
char *name;
}student;
student student_1;
student_1.number=20134567;
student_1.name="李老二";
printf("%s %d",student_1.name,student_1.name);
return 0;
}
总结:
结构和联合的区别,结构的成员可以同时存在很多个不同类型,每一个成员可以同时存在,并且互不影响。联合内部的成员可以是不同类型,但是同时只能存在一个,修改了一个其余的成员跟着一起改变,同时只能存在一个成员其余的成员均编程最近被修改的成员。typedef定义的结构和联合声明起来比较简单。
结构内部成员,分配的存储地址不同,联合内部的成员分配的存储地址相同,且分配地址大小为字节数最大的成员。