结构体
引例
有时候需要将不同类型的数据组合成一个有机的整体,以便于引用。如:一个学生有学号/姓名/性别/年龄/地址等属性。
定义形式
struct 结构名 //结构体名可省略不写 { 成员表列 //若干成员组成 };
范例
struct student { int num; char name[20]; int age; float score; char addr[30]; };
定义结构体类型变量
法一
struct student { int num; char name[20]; int age; float score; char addr[30]; }; struct student student1,student2; //student1和student2为struct student类型的变量
法二
struct student { int num; char name[20]; int age; float score; char addr[30]; }student1,student2; //student1和student2为struct student类型的变量
结构体变量的引用方式
结构体变量名.成员名
范例
student1.num=100;
细节
-
若结构体student1已初始化,student2未初始化,可通过student2=student1的方式对student2进行初始化
-
&student1=&student1.num //student1.num(int num) 是student1中第一个定义的变量类型
初始化
法一
struct student { int num; char name[20]; int age; float score; char addr[30]; }; struct student student1; student1={100,"小明",19,98,"新乡"};
法二
struct student { int num; char name[20]; int age; float score; char addr[30]; }student1={100,"小明",19,98,"新乡"};
定义结构体数组
法一
struct student { int num; char name[20]; int age; float score; char addr[30]; }student[3];
法二
struct student { int num; char name[20]; int age; float score; char addr[30]; }; struct student student[3];
结构体数组初始化
法一
struct student student1[]{{...},{...},{...}};
法二
struct student { int num; char name[20]; int age; float score; char addr[30]; }; struct student student[3]={ {}, {}, {} };
课后作业
-
投票系统: 有5个候选人,每次输入一个候选人名字,最后输出各人投票结果
指向结构体类型的指针
-
一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址
-
指针变量也可以用来指向结构体数组中的元素
一般形式
-
struct 结构名 *结构指针变量名
struct student *p;
-
当然也可以在定义student结构的同时说明p。与其他指针变量用法相同,结构指针变量也必须要先赋值,后使用。
-
赋值是把结构变量的首地址赋予该指针变量,不是把结构名赋予该指针变量。
struct student { int num; char name[20]; int age; float score; char addr[30]; }student1; struct student *p; p=&student1 //正确 p=&student //错误
访问变量
-
(*结构指针变量).成员名
(*p).num;
-
结构指针变量 ->成员名
p->num;
-
结构变量.成员名
student1.num;
用typedef定义类型
引例
#define PI 3.14 //宏定义
用法
用typedef声明新的类型名来代替已有的类型名
实例1
//声明INTEGet为整型
typedef int INTEGet; INTEGet x;//x为整型
实例2
//声明结构类型
type struct { int month; int day; int year; }DATE; DATE data1; //data1为结构体变量
实例4
//声明NUM为整型数组类型
#include <stdio.h> typedef int NUM[100]; void main() { NUM num; printf("%d",sizeof(num)); } 运行:400
实例5 (有误!!!)
//声明STRING为字符指针类型
typedef char* STRING; STRING p; p="I Love You."; printf("%s\n",p); 运行: