结构

来源:互联网 发布:vb.net 删除文件夹 编辑:程序博客网 时间:2024/04/30 04:38

结构可以理解为将几种元素组合起来的工具。例如:date结构

struct date

{

int month;

int day;

int year;

date结构定义了三个整型元素,分别名为month,day,year。其实date的定义在语言中定义了新类型,以后就可以将变量声明为struct date类型,例如:

struct date today;

struct date purchase;

或者可以在同一行定义中包含一个名为purchaseDate的同类型变量。

不同于int,float,和char变量,处理结构变量需要特殊的语法。通过变量名称,在之后加上句点来访问结构成员。例如:

today.day = 21;

注意变量名,句点和成员名称之间不允许出现空格。

当我们在访问对象的属性的时候也使用句点操作符,所以当遇到句点操作符,编译器会确定句点操作符的左边是对象还是结构,然后进行相应的处理。

1.结构的初始化

初始化结构与初始化数组类似,将元素列在一对花括号中,元素之间以逗号隔开。例如:

struct date today = {7 , 2, 2011};

和数组初始化一样,列出值可以少于结构体中包含的元素个数。例如:

struct  date today = {7};

将today.month 初始化为7,但是没有给today.day或者today.year赋值。在这种情况下,它们的默认初始值是未定义的。

在初始化列表中,用下面的表达式

.member = value可以以任意顺序初始化结构中指定的成员,例如:

struct date today = {  .month = 7, .day = 2, .year = 2011};

struct date today = { .year = 2011};

2.结构中的结构

可以定义一个结构,他本身包含其他结构作为自己的一个或多个成员,或者可以定义包含数组的结构。

Apple的CGGeometry.h头文件是由typedef定义的:

struct CGPoint {

CGFloat x;

CGFloat y;

};

typedef struct CGPoint CGPoint;

struct CGSize{

CGFloat width;

CGFloat height;

};

typedef struct CGSize CGSize;

struct CGRect{

CGPoint origin;

CGSize size;

};

typedef struct CGRect CGRect;

现在声明一个CGPoint变量并且把成员x设置为100和成员y设置为200,可以编写如下代码:

CGPoint  startPt;

startPt.x = 100;

startPt.y = 200;

这里要知道startPt是一个结构而不是一个对象,根据变量名前面是否有星号来判断。Apple也提供了简便的函数用于创建CGPoint,CGSize,CGRect结构。例如:

CGPoint startPt = CGPointMake (100.0,200.0);

定义一个矩形,设置为200*100

CGSize rectSize = CGSizeMake (200.0 , 100.0);

继续创建一个包含尺寸和原点的矩形:

CGRect theFrame;

theFrame.origin = startPt;

theFrame.size = rectSize;

如果希望改变矩形的宽度为175,则代码如下:

theFrame.size.width = 175;

3.关于结构的补充细节

在将变量定义为特定结构类型的同时,声明这个结构是合法的。例如:

struct date 

{

int month;

int day;

int year;

}today,purchaseDate;

还可以按照常规变量进行初始化。

struct date

{

int  month;

int day;

int year;

} today = {9.25.2011};

如果定义结构时,也定义了该结构类型的所有变量,那么可以省略结构名称。例如:

struct 

{

int month;

int day;

int year;

}  dates[100];

因为没有这个结构的名称,所以定义同类型变量的唯一方式就是再次显示定义这个结构。

0 0
原创粉丝点击