1.结构体的声明
为什么要出现结构体??
当前学习的类型都是内置类型
char
short
int
double
...
为了描述复杂对象引入结构体
1.1结构的基础知识
结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
区别于数组:
数组是一组相同类型的集合
1.2结构的声明
#include <stdio.h>
struct Stu
{
//学生的相关属性
char name[20];
int age;
char sex[5];
char tele[12];
} s3, s4;
//s3,s4是结构体类型的变量
//s3,s4是全局的
int main()
{
struct Stu s1;
struct Stu s2;
//s1,s2是结构体类型的变量, 是局部变量
return 0;
}
该类型定义main中不可缺少struct
让我们看看可以省略struct的
#include <stdio.h>
typedef struct Stu
{
//学生的相关属性
char name[20];
int age;
char sex[5];
char tele[12];
}Stu;//Stu 是重命名产生的新的类型
int main()
{
Stu s5;
return 0;
}
1.3结构成员弟弟类型
结构成员可以是标量、数组、指针,甚至是其他结构体
1.4结构体变量的定义和初始化
声明类型的同时定义变量p1
struct point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
定义结构体变量p2
struct point p2;//定义结构体变量p2
初始化,定义变量的同时赋值
struct point p3 = { x,y };
类型的声明
struct stu //类型声明
{
char name[15];
int age;
};
初始化
struct stu s ={"zhangsan",20};//初始化
结构体嵌套初始化
struct Node
{
int data;
struct point p;
struct Node* next;
}n1 = { 10,{4,5},NULL }; //结构体嵌套初始化
初始化
struct Node n2 = { 20,{5,6},NULL };
2.结构体成员的访问
有两种访问方式:
结构体变量.成员名
结构体指针->成员名
结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
我们如何访问呢??
struct S s;
strcpy(s.name, "zhangsan");//使用.访问name成员
s.age = 20;//使用.访问age成员
结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
那该如何访问成员。