c语言yin,C语言之结构体-yinliudong_8800-ChinaUnix博客

1.结构体

1.1声明结构体类型

struct 结构体类型名 {

类型名 成员名;

....

};1.2定义结构体变量

方法1:

struct 结构体类型名 {

类型名 成员名;

...

} 变量名;

方法2:

struct 结构体类型名 变量名;

结构体类型可以嵌套,一结构体类型包含其他结构体类型。

成员名可以和结构体变量名相同。1.3结构体变量的引用

定义:结构体变量名.成员名

规则:

1.不能将结构体变量作为一个整体进行赋值,输出;只能对结构体中的各个成员分别进行,允许类型相同的结构体变量相互赋值。

2.如有嵌套定义,用若干引用运算符。

3.结构体成员变量可以像普通变量一样使用运算(使用形式不同)。

1.4结构体变量的初始化

1.定义时初始化

struct 结构体类型 {

....

} 变量名= {

...

};

2.先定义,再赋值

struct 结构体类型 {

....

} 变量名;

变量名 = {.....};

1.5结构体数组

数组中每个元素都是一个结构体类型的数据

定义:

struct student stu[m];

初始化:

struct student stu[3] = {{...},{...},{...}};

1.6结构体指针

结构体指针就是该变量所占据的内存段的起始地址

定义:

struct student *p, stu;

p = &stu;

引用:

(*p).name;

p->name;

->称为“指向运算符”。

1.7结构体数组指针

定义:

struct student *p, stu[3];

p = stu;

1.8用结构体变量和指向结构体指针作函数参数

2共用体

使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。

2.1   定义:

union union_name {

....

}variable_names;

共用体与结构体异同:

共用体变量所占的内存长度等于最长的成员的长度。

结构体变量所占的内存长度等于各成员所占内存长度之和。

2.2 共用体变量引用

先定义,后引用,而且不能引用共用体变量,而只能引用共用体变量中的成员。如

union {

int i;

char ch;

float f;

}a, b, c;

void main()

{

printf(FORMAT,a.i);           //只能引用共用体变量的成员,不能直接引用共用体变量。且每一瞬时只有

}                                    一个成员起作用(“共用”的含义,最后一次存放的成员起作用)。

共用体变量和它的成员的地址都是同一地址;

不能使用共用体变量做函数参数,也不能用作函数返回值,但可以使用指向共用体变量的指针;

共用体和结构体可以相互作为成员,也可以定义共用体数组。

3.枚举类型

如果一个变量只有几种可能的值,可以定义为“枚举变量”。所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值得范围内

声明:

enum weekday {

sun, mon, tue, wed, thu, fri, sat            //枚举元素或枚举常量,不是变量,不能对其赋值;按定义是

};                                               的顺序使他们的值为0,1, 2 ....           声明枚举变量

enum weekday workday, week_end;

workday = mon;

week_end = (weekday)2;

week_end = (weekday)(5-3);

枚举元素的值可在定义时由程序员指定,如:

enum weekday {

sun=7, mon = 1, tue, wed, thu, fri, sat

}workday, week_end;

以后顺序+1,sat为6。

枚举元素可以用来做判断比较,如

if(workday == mon)...

4.用typedef定义类型

4.1用typedef声明新的类型名

typedef int INTEGER;

可以使用INTEGER定义新的整形变量

INTEGER i, j;

4.2声明结构体类型:

typedef struct {

int month;

int day;

int year;

}DATE;

DATE brithday;

DATE *p;

4.3声明数组

typedef int NUM[100];

NUM n;                    //声明n为整型数组变量

4.4 声明指针

typedef char *STRING;

STRING p, s[10];          //p为字符型指针变量,s为指针数组

4.5 声明函数指针

typedef int (*POINTER)();

POINTER p1, p2;           //声明POINTER为指向函数的指针类型,该函数返回整型值。p1,p2为POINTER类型的指针。

归纳起来,声明一个新类型名的方法是:

1.先按定义变量的方法写出定义体(如:int i;)

2.将变量名换成新类型名(如:将i换成COUNT)

3.在最前面加typedef(如:typedef int COUNT;)

4.然后可以用新类型名定义变量

说明:

1.用typedef可以声明各种类型名,但不能用来定义变量。

2.用typedef只是对已存在的类型增加一个类型名,而没有创造新的类型

3.typedef与#define相似处:

#define是在预编译的处理的,它只能做简单的字符串变换

typedef是在编译的时候处理的

4.当不同源文件用到同一类型数据时,常用typedef声明一些数据类型,把他们放在一个文件中,然后通过#include引用

5.使用typedef有利于程序的通用和移植

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值