结构体的定义
“结构"是一个构造类型,它由多个"成员"构成,每个"成员"的类型可以是一个基本类型也可是一个构造类型。一个"结构"中往往出现不同数据类型的"成员"。例如再学生的登记表中,姓名丶性别为字符类型;学号可为整形或者字符类型;年龄为整型;成绩为整型或实型。很显然这些学生信息不能用一个数组来存放。因为数组中的各个元素类型必须一致,以便系统编译处理。为了解决不同类型成员放在一起,C语言给出了另一个构造数据类型——“结构”又叫结构体
结构既然是一种“构造”而成的数据类型,那么在说明和使用时必须先定义它也就是构造它,如同在说明和调用函数之前先定义函数一样。
通常我们定义一个简单的构造体形式为:
struct 结构体名
{
数据类型1 成员名1;
数据类型2 成员名2;
....................................
数据类型n 成员名n;
}
通过一个简单的例子来说明上面的形式:
main()
{
struct complex_struct{ double x,y;}z;
double x=3.0;
z.x=x;
z.y=4.0;
printf("struct value:z.x=%d z.y=%d\n",z.x,z.y);
}
结果显示:struct value:z.x=3.000000 z.y=4.000000
我们定义结构体类型有三个方法:
方法① 先定义结构体类型 再定义变量名
方法② 定义结构体类型同时定义结构体类型变量
方法③ 直接定义结构体类型变量
说明
结构体类型与结构体变量概念不同
类型:不分配内存; 变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体嵌套
结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。换句话说,结构体的成员可以是另一个结构体,即结构体可以嵌套定义。、
一个简单的例子来说明嵌套结构体
#include "stdafx.h"
struct Point
{
int x;
int y;
void tostring()
{
printf("%d",x+y);
}
};
struct lin
{
Point form;
Point to;
void print()
{
printf("%d",form.x*form.y);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
lin lin;
lin.form.x=10;
lin.form.y=10;
lin.to.x=20;
lin.to.y=20;
lin.form.tostring();
getchar();
return 0;
}
![微笑](http://static-blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)