结构体类型的说明
struct slist//结构体定义
{
double s;
struct slist *next;
};
必须要有struct关键字。而slist是结构体类型,可以随便定义,但必须要满足变量的定义规则。
大括号内是结构体成员变量
注意这个结构体没有定义变量
上面的slist是结构体类型的名称,不是结构体变量的名称!!
结构体变量定义的方法
结构体变量定义有三种:
1.类型说明时,定义变量
struct slist//结构体定义
{
double s;
struct slist *next;
}a;//a就是结构体变量
2.先定义类型,再定义变量
struct slist//结构体定义
{
double s;
struct slist *next;
};struct slist a;//a就是结构体变量
3.没有类型名,直接定义变量(用的少)
struct //没有类型名
{
double s;
struct slist *next;
}a;//结构体变量a
typedef
typedef struct slist//结构体定义
{
double s;
struct slist *next;
}a;
注意 a不是结构体变量了,而是结构体类型,相当于 struct slist的小名
a x;//用a来定义一个结构体变量相等于struct slist x;
用struct slist x;也是可以定义x结构体变量
定义结构体变量的三种情况
1.普通变量
a x;//普通变量
2.指针变量
a * p;//指针变量
3.数组变量
a x[3];//数组变量
结构体成员的引用
变量引用
变量.结构体变量
x.s = 3;
指针引用有两种情况
1.指针名->结构体成员变量
2.(*指针名).结构体成员变量 成员运算符.优先级比(*)解引用运算符高
p->s;
(*p).s;
数组引用
数组名[下标].结构体成员变量
必须通过循环语句来引用
for(int i=0;i<3;i++)
x[i].s = 15;
链表
一个数据成员由两个部分组成,数据域和地址域(下一个数据的地址)
地址域肯定是指针,这个指针必须是整个数据的类型
struct 类型名
{
数据
struct 类型名 * next;//指针
};