结构里面可以嵌套结构
结构变量只定义模式,不分配存储空间
定义结构体变量:
1. 指明struct,并且指明struct_type
2. 同时定义结构类型+变量
神奇的定义方式:
struct
{
char name[20];
int gender;
int age;
}t[1000001],a={"Celseca",1,19},*pt;
未定初值的局部变量的值是不确定的
链表初体验:
struct pNode
{
float pos[2];
struct pNode*next;
} p,u,*pt;
p.next=&u;
结构指针辨析:
*pt.day等价于*(pt.day)
应使用*(pt).day
链表!
数据之间的关系由程序随时设定和改变
第一个:表头
最后一个:表尾
动态链表!(划重点)
申请存储空间:
一个个节点地建立动态链表:
malloc:申请存储空间,返回开始地址
void *malloc(unsigned size)
动态数据已经分配完:返回None
int value:数据域
free:释放由ptr所指向的存储块,要求ptr的值是调用函数malloc或calloc
联合、位域
联合:要求数据对象在程序执行的不同时期能存储不同类型的值(可能整型可能浮点型,之类的)
同一存储区域当做不同类型变量来使用
如 union udata x, y, g; 也可将联合类型定义与变量定义合在一起,如
union udata //同一块存储区域哦
{
int ival;
char chval;
float fval;
} x, y, g;
x.ival (视联合变量 x 为 int 型的)
y.chval (视联合变量 y 为 char 型的)
g.fval (视联合变量 g 为 float 型的)
//要求能存储最大的一种数据!
位域
枚举
即枚举专用名称信息:程序用枚举方法列举一组标识符作为枚举类型的值的集合。当一个变量具有
这种枚举类型时,它就能取枚举类型的标识符值
程序不能对枚举常量赋值
编译系统将枚举类型中的标识符值作为常量处理,故称枚举常量。程序不能对它们赋值
如 SUN = 0 或 SAT = 6 都是错误的
枚举常量的对应整数也可由程序直接指定
如 enum weekday {SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
typedef!
作为类型命名的机制
用 typedef 定义新类型名后,对于结构,联合或枚举类型,使用它们定义或说明变量时不再冠类型类别关键字
结构形参
是给结构形参分配存储单元,是函数的局部变量
结构指针形参即储存相关地址,相关的值重新存储于计算机相应的成分中