简略的结构体讲解(基于C语言)更新时间:2019-10-25
前置技能:点点指针
结构体的定义和使用
(1)一般形式
他的一般格式只这样的(记得struct关键字哟):
struct 结构体名
{
类型名1 成员名1; //成员类型可以是基本类型或构造型
类型名2 成员名2;
...
类型名n 成员名n;
}; //注意不要忘记此处的;
比如我们要建立一个人的结构体,它就至少包括,身高体重年龄名字等等数据,就可以如下构造:
struct Human//一个名字为Human的结构体 { double Tall;//身高 double Weigth;//体重 int Old=666;//年龄 char Name[200];//姓名 //*****等都可以加入的 };
(2)定义结构体类型的变量、指针变量和数组
定义结构体类型变量有以下三种方法
方法一:在定义结构体类型时,同时定义变量。
struct Human//一个名字为Human的结构体 { double Tall;//身高 double Weigth;//体重 int Old;//年龄 char Name[200];//姓名 //*****等都可以加入的 }stu1,*stu,stus[5];//分别定义了该类型的普通变量,指针,和结构体数组
方法二:先定义结构体类型,再定义该类型的变量
struct Human//一个名字为Human的结构体 { double Tall;//身高 double Weigth;//体重 int Old;//年龄 char Name[200];//姓名 //*****等都可以加入的 }; Struct Human stu1,*stu,stus[5]; //分别定义了该类型的普通变量,指针,和结构体数组
方法三:用类型定义符typedef先给结构体类型名别名,再用别名定义变量
typedef struct Human//一个名字为Human的结构体 { double Tall;//身高 double Weigth;//体重 int Old;//年龄 char Name[200];//姓名 //*****等都可以加入的 }Stu; Stu stu1,*stu,stus[5]; //分别定义了该类型的普通变量,指针,和结构体数组
这里的typedef就是把Human这个类型的结构体,命名为了Stu,Stu就等价于struct Human了。
typedef还可以把一些类型名很长的简化,比如long long可以变成LL。
typedef long long LL;
注意:
别把结构体类型跟变量弄混了。
1.类型:不分配内存;变量:分配内存;
2.类型:不能赋值、存取、运算;变量:可以;
3.结构体可以嵌套;
4.结构体成员名与程序中变量名可相同,不会混淆。
嵌套结构体就是可以在一个结构体了,包含另一个结构体的类型的。
typedef long long LL; 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]={{"ddd",'f',22,90},{"Su",'M',20,85}};
不过很不推荐这种,emmm。建议在结构体建立的时候就赋好初值,如下:
#include <stdio.h> struct Human//一个名字为Human的结构体 { double Tall;//身高 double Weigth;//体重 int Old=666;//年龄 char Name[200];//姓名 //*****等都可以加入的 }; int main() { struct Human a; printf("%d ",a.Old); return 0; }
方法二:
struct student{ char name[10]; int age; float score[5],ave; }; struct student Stu = {"ZhangSan",22,99,78,99,76,88};
(4)引用结构体变量中的成员的访问
a.结构体变量名·成员名:stu1.name
b.结构体指针变量—>成员名:ps—>name
c.(*结构体指针变量).成员名:(*ps).name
d.结构体变量数组名.成员名:stu[0].name
注:1.求结构体类型数据的字节数 sizeof(变量名或类型名);
大概就是这些把,emmm构造函数哪些好像是c++的?忘了,下次更新就接着讲链表把。。