c语言·结构体(谭浩强版【大一秋季学期】)

c语言·结构体(谭浩强版【大一秋季学期】),第1张

c语言·结构体(谭浩强版【大一秋季学期】)

看书作笔记,记录自己不太懂或不太熟的知识点

创建结构体

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个字母用大写表示,以便于系统提供的标准类型标识符相区别

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5691355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存