南城网站建设公司咨询,深圳品牌网站制作公司,WordPress二维码动态图片,建筑导航网站C 中的结构体
C 数组允许定义可存储相同类型数据项的变量#xff0c;结构是 C 编程中另一种用户自定义的可用的数据类型#xff0c;它允许您存储不同类型的数据项。
结构体中的数据成员可以是基本数据类型#xff08;如 int、float、char 等#xff09;#xff0c;也可以…C 中的结构体
C 数组允许定义可存储相同类型数据项的变量结构是 C 编程中另一种用户自定义的可用的数据类型它允许您存储不同类型的数据项。
结构体中的数据成员可以是基本数据类型如 int、float、char 等也可以是其他结构体类型、指针类型等。
结构用于表示一条记录假设您想要跟踪图书馆中书本的动态您可能需要跟踪每本书的下列属性
TitleAuthorSubjectBook ID
定义结构
结构体定义由关键字 struct 和结构体名组成结构体名可以根据需要自行定义。
struct 语句定义了一个包含多个成员的新的数据类型struct 语句的格式如下
struct tag { member-listmember-list member-list ...
} variable-list ;tag 是结构体标签。
member-list 是标准的变量定义比如 int i; 或者 float f;或者其他有效的变量定义。
variable-list 结构变量定义在结构的末尾最后一个分号之前您可以指定一个或多个结构变量。下面是声明 Book 结构的方式
struct Books
{char title[50];char author[50];char subject[100];int book_id;
} book;在上面的声明中第一个和第二声明被编译器当作两个完全不同的类型即使他们的成员列表是一样的如果令 t3s1则是非法的。
结构体的成员可以包含其他结构体也可以包含指向自己结构体类型的指针而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
结构体变量的初始化
和其它类型变量一样对结构体变量可以在定义时指定初始值。
访问结构成员
为了访问结构的成员我们使用成员访问运算符.。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用 struct 关键字来定义结构类型的变量。
下面我们来举一个例子看看结构体的定义与使用。我们知道平面上点的是由其在x轴上的坐标和y轴上的坐标而确定的所以我们在程序中想要描述平面上的一个点就需要定义这个点的两个属性变量x和y例如 float point0_x 1;
float point0_y 3;
float point1_x 2;
float point1_y 4;而对于这样的坐标点一个点相关的变量中x和y始终是成对出现的也就是说对于平面内点的坐标一定是有两个属性x和y。于是我们就可以将这个两个属性两个变量定义成一个结构体名字就叫作平面内点的坐标变量简称点
struct point
{float x;float y;
};这样我们就有了一个叫作“点类型”的变量类型它表示只要定义了这种变量类型这个类型的变量就会有两个属性x和y。接下来我们就可以使用这种类型来定义两个点p0和p1,
struct point p0;
struct point p1;
p0.x 1;
p0.y 2;
p1.x 3;
p1.y 1;结构体嵌套
上面我们定义了平面上的两个点的坐标接下来我们就有了平面上两个点的坐标有了点我们就可以根据点的结构再定义一种新的变量类型叫作矩形struct rect。 我们来定义一个矩形的结构体这个矩形结构体中嵌套了点结构体而使用时与正常结构体使用一致。先来看看这个例子并编写一个函数用于计算矩形的面积面积
#include stdio.h
#include math.h
struct point
{float x;float y;
};
struct rect
{struct point p0;struct point p1;
};
float area_of_rect(struct rect r)
{return fabs(r.p1.x - r.p0.x) * fabs(r.p1.y - r.p0.y);
}
int main(int argc, char *argv[])
{struct rect r;r.p0.x 1;r.p0.y 2;r.p1.x 3;r.p1.y 1;printf(%f\n, area_of_rect(r));return 0;
}简化定义
当然在这里我们定义的结构体变量并将其做为了一个函数的输入参数。关于结构体做为函数参数和函数返回值的问题我们将在下一节中学习。另外我们在定义结构体时也可以直接在定义之后定义这个结构体类型的变量
typedef struct student
{int id;int age;char name[10];
} zhangs,lis,wangw;这样就定义了一个叫学生的结构体类型并在其后直接定义空虚这个学生类型的3个变量zhangs,lis,wangw。
另外我们在使用结构体变量时总是要使用struct name var这样的形式多多少少有一些麻烦。为了使程序更加简洁我们可以使用typedef关键字来来对这个结构体类型重新定义。例如
typedef struct student
{int id;int age;char name[10];
} stu;
stu s0;
stu s1;
stu s2;这样就定义了一种结构体叫struct student而通过typedef将其重新定义为stu类型之后我们就可以 通过stu来定义这种结构体类型变量。在程序中使用stu就表示struct stuent这样表示就简单很多但是请注意如果使用了typedef结构体定义中大括号结构后的名称就是这个结构体的新名字而如果不使用typedef结构体定义中的大括号结束后面的文字表示定义的是这个结构体的变量。