看书作笔记,记录自己不太懂或不太熟的知识点
创建结构体struct student
{
``````
};(此处要有分号)
成员表列也称为“域表”,每一个成员是结构体中的一个域
定义结构体变量1.struct student stu;
2.struct student(这里也可以不要"student"变成不指定类型名而直接定义结构体类型变量)
{
``````
}stu;(结构体变量可以和结构体类型成员重名)
结构体变量初始化struct student stu={`````}(按照成员项的顺序赋值)
struct student stu={.name="ERD"}(c99允许对某一成员初始化,其他未被指定初始化的成员被初始化为0,'',NULL)
结构体变量引用stu.name="ERD"
stu.birthday.year=1990
同类型结构体可以相互赋值stu1=stu2
结构体数组
定义同上(变成数组形式)
初始化同上(变成数组形式)
结构体指针 初始化struct student *p;
struct student stu1,stu2[2];
p=&stu1;
p=stu2;
引用(*p).num~~p->num
用结构体变量和结构体变量的指针的指针作函数参数用结构体变量作实参较少用这种方法(在函数调用期间形参也要占用内存单元,在空间和时间上开销大)
链表写程序作业写得挺熟了,不必赘述
struct student stu.next=NULL(记得把链尾的指针设为NULL)
动态链表malloc,calloc,free之类的
输出链表:stu=stu.next之类的
共用体类型union Data
{
int i;
char c;
float f;
}
以上3个变量虽然在内存中占用的字节数不同,但是都从同一地址开始,共享同一段内存的结构。
共用体变量所占的内存长度等于最长的成员的长度
定义同结构体
引用与结构体大同小异
不能同时对每一个成员赋值——a={1,'a',1.0}(×)
起作用的成员是最后一次被赋值的成员,原有变量存储单元中的值就被取代了
共用体类型数据的特点同一个内存段可以用来存放几种不同类型的成员,但在每一瞬间只能存放其中一个成员,而不是同时存放几个。即在共用体变量中只能存放一个值
(例)
a.i=97; printf("%d",a.i); \ 输出整数97 printf("%c",a.ch); \ 输出字符'a' printf(:%f",a.f); \输出实数0.000000(97是int,而要输出"%f"会输出0.000000)
共用体变量的地址和各成员的地址都是同一地址
以前的c规定不能把共用体变量作为函数参数,但可以使用指向共用体变量的指针作函数参数。C99允许共用体变量作为函数参数
用途在数据处理中,有时需要对同一段空间安排不同的用途,这时用共用体类型比较方便,能增加程序处理的灵活性。
枚举类型一个变量只有几种可能的值,则可以定义为枚举类型
定义enum Weekday{sun,mon,tue,wed,thu,fri,sat};
enum Weekday workday,weekend;
其中,workday,weekend称作枚举变量,sun·····sat被称为枚举元素或枚举常量
也可以不声明有名字的枚举类型,直接定义枚举变量,例:enum{sun,mon,tue,wed,thu,fri} workday
枚举数据的特点不能对枚举元素赋值
每一个枚举元素代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2·····
workday=mon~~workday=1
printf("%d",workday)
也可以人为指定枚举元素的数值enum Weekday{sun=7,mon=1,tue····}
则tue=2,sat=6
如果给枚举变量赋枚举元素外的值会报错
typedef声明新类型名typedef int Integer
int i~~Integer i
也可以用在结构体,共用体,枚举,指针,数组类型中
(结构体)
typedef struct
{
int i
}Date;
Date birthday;
(数组)
typedef int Num[100]
Num a;(a为有100个元素的整形数组)
(指针类型)
typedef char* String
String p,s[10](指针为字符指针数组)
(指向函数的指针)
typedef int (*Pointer)();
Pointer p1,p2;
习惯上,常把用typedef声明的类型名的第1个字母用大写表示,以便于系统提供的标准类型标识符相区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)