昨天就是新的一年,小编看到了一句话送给各位读者:在过去的一年里,也许你踏足山巅,拥有团花锦簇的风光,也许你进入了低谷,经历了一个人的兵荒马乱,但是没关系的,去年千般未如愿,今年万事定称心。把过去的事儿,过去的人,一块尘封在记忆中不再烦恼,不再怀念。岁月本无语,未来犹可期,我始终如少年,你始终如初见。新的一年,我们看到了盛世的烟火,看到了繁华的街景,在c语言中写出烟花的代码可不是一个简单的小事情,他需要不断的积累,接下来我们学习结构体,在后面小编会给大家讲一些小的c游戏,烟花就需要用到结构体哦!
提示:以下是本篇文章正文内容,下面案例可供参考
结构就是一种集合
1,在之前我们学过很多数据类型,但是这些类型是内置类型,能描述的对象是非常有限的
2,但是生活中存在许多复杂对象,复杂对象就是不能用单一的数据去描述的,这时候为了方便描述复杂对象,于是c语言就有了结构体的概念
3,相比于结构体,数组是一组相同类型元素的集合,而结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同的类型
分析 |
就比如:我们划分一个人的特征
首先是性别,性别为男/女 ,我们存储这个性别用的类型为字符类型
再次是年龄,年龄肯定是正整数,我们定义一个有符号类型的整数来给年龄
然后是身高,身高是一个有小数点的数,所以我们这里可以用浮点型来定义身高
还有很多,在这里我们把人的特征集合在一起这个就是结构,然后这些特征被称为成员变量,每个成员
的变量类型可以相同可以不同
语法形式
struct tag
{
member-list ;
} variable-list;
例如:
//人的结构体类型声明
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
}p1,p2;
int main()
{
return 0;
}
分析 |
在这里tag就是结构体的标签,也就是要描述的东西,也就是复杂对象像上面的例子中的人;member-list是成员列表,在这里面声明成员类型,也就是定义变量,如上方例子中的年龄,性别,身高等;variable-list变量列表,就是我们用上面这个类型来创建变量,这里肯定会有疑惑的,比如int x = 0;这后面是不是有一个分号,然后我们不初始化就是int x;所以简单的来说:也就是说前面的内容都是结构体的类型,然后我们o就是结构体类型的变量。在上面代码中我们创建了两个结构体变量p1和p2.在这里p1和p2是全局变量。而我们在定义变量的时候要尽量用局部变量所以我们需要继续往后学习结构体的变量的创建
在上面我们是在main函数外面声明的全局变量,接下来我们学习结构体的变量创建
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
};
int main()
{
struct people p1 = { 0 };//结构体的局部变量
return 0;
}
}
分析 |
结构体的成员可以是标量,数组,指针,甚至可以是其他结构体
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
};
struct team
{
struct people p;
int num;
int class;
};
int main()
{
struct people p1 = { 0 };//结构体的局部变量
return 0;
}
分析 |
在这里我们又创建了一个小组成员的结构体变量,在结构体变量里面我们定义了结构体people类型的变{}量p1,数量,和组别。这里是结构体内使用其他结构体。
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
};
struct team
{
struct people p;
int num;
char class[5];
};
int main()
{
//struct people p1 = { 0 };//结构体的局部变量
struct people p1 = { "张三",20,175,"男" };
struct team t = { {"张三",20,175,"男"} ,1,"经理" };
return 0;
}
分析 |
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数,结构体变量.结构体成员
<table><tr><td bgcolor=turquoise>分析 </td></tr></table>
在上面我们只是通过监视窗口来查看结构体内的成员,我们可以将他打印出来么接下来就要用到结构体的访问,也就是我们之前学习的操作符内的结构体操作符,结构体操作符详见小编所写的详解c语言操作符(下篇)
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
};
struct team
{
struct people p;
int num;
char class[5];
};
int main()
{
//struct people p1 = { 0 };//结构体的局部变量
struct people p1 = { "张三",20,175,"男" };
struct team t = { {"张三",20,175,"男"} ,1,"经理" };
printf("%s %d %d %s\n",p1.name,p1.age,p1.height,p1.sex);
printf("%s %d %d %s %d %s", t.p.name, t.p.age, t.p.height, t.p.sex,t.num,t.class);
return 0;
}
分析 |
在这里,成员是内置类型不是指针,所以我们用变量名点成员来访问成员元素。
struct people
{
char name[20]; //名字
int age; //年龄
int height; //身高
char sex[5]; //性别
};
struct team
{
struct people p;
int num;
char class[5];
};
void print(struct people* p)
{
printf("%s %d %d %s\n", p->name, p->age, p->height, p->sex);
}
int main()
{
//struct people p1 = { 0 };//结构体的局部变量
struct people p1 = { "张三",20,175,"男" };
struct team t = { {"张三",20,175,"男"} ,1,"经理" };
//printf("%s %d %d %s\n",p1.name,p1.age,p1.height,p1.sex);
//printf("%s %d %d %s %d %s", t.p.name, t.p.age, t.p.height, t.p.sex,t.num,t.class);
print(&p1);
return 0;
}
分析 |