赞
踩
一、结构介绍
C语言中的结构(Structure)是一种用户自定义的复合数据类型,用于将不同类型的数据组合成一个单一的实体。结构允许您在一个数据结构中存储多个不同类型的数据,这些数据可以通过结构的成员来访问。
以下是结构类型的数据
- struct {
- char name[20];
- int gender;
- double height;
- double weight;
- }timmy;
如在上述代码中,timmy 是由该结构声明的变量,它由4个成员组成。
使用成员运算符 . 加上 字段名 可以访问到结构的各个成员。
- // 将Timmy的数据装入结构变量
- strcpy(timmy.name, "Timmy");
- timmy.gender = 1;
- timmy.height = 170.00;
- timmy.weight = 60;
-
- // 从结构变量中显示Timmy的数据
- printf("%s\n", timmy.name);
- printf("%d\n", timmy.gender);
- printf("%.2f\n", timmy.height);
- printf("%.2f\n", timmy.weight);
- struct {
- char name[20];
- int gender;
- double height;
- double weight;
- }david;
-
- struct {
- char name[20];
- int gender;
- double height;
- double weight;
- }jane;
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- }timmy;
-
- struct person david;
- struct person jane;
- int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- };
- //结构体初始化
- struct person timmy = {"timmy", 1, 170.00, 60.00};
结构数组与基本变量数组类似,使用方括号内填数组元素个数进行声明。
初始化列表也可用于初始化结构数组,初始化列表中依次填每个结构的初始化列表,每个结构的初始化列表之间由逗号分隔。
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- };
-
- struct person people[3] = {
- {"timmy", 1, 170.00, 60.00},
- {"david", 1, 175.00, 65.00},
- {"jane", 2, 165.00, 55.00}
-
- };
- struct contact {
- char phone[20];
- char email[20];
- };
-
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- struct contact c;
- };
-
- //初始化
- struct person timmy = {
- "timmy", 1, 170.00, 60.00, {"130123456678", "timmy@xxx.com"}
- };
若想访问 结构 timmy中的 结构 contact里面的相关参数(phone、email),可以使用timmy.contact.phone的形式访问。如需打印出phone、 mail数据可参考下列操作
- printf("%s\n", timmy.c.phone);
- printf("%s\n", timmy.c.email);
指针可以指向基本类型数据也可以指向数组,结构也同样可以指向。
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- };
-
- struct person timmy = {"timmy", 1, 170.00, 60.00};
-
- struct person *pTimmy = &timmy;
-
- printf("%s\n", (*pTimmy).name);
- printf("%d\n", (*pTimmy).gender);
- printf("%.2f\n", (*pTimmy).height);
- printf("%.2f\n", (*pTimmy).weight);
和正常指针一样,加上星号 * 用于声明一个指针。使用取地址运算符&,可以获取指针。
另外,C语言中提供了更加方便的写法,即使用成员间接运算符 -> 。pTimmy->name等价于(*pTimmy).name 。
- printf("%s\n", pTimmy->name);
- printf("%d\n", pTimmy->gender);
- printf("%.2f\n", pTimmy->height);
- printf("%.2f\n", pTimmy->weight);
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- };
-
- void change(struct person per)
- {
- strcpy(per.name, "david");
- per.gender = 1;
- per.height = 175.00;
- per.weight = 65.00;
- }
-
- int main()
- {
- struct person timmy = {"timmy", 1, 170.00, 60.00};
- change(timmy);
- printf("%s\n", timmy.name);
- printf("%d\n", timmy.gender);
- printf("%.2f\n", timmy.height);
- printf("%.2f\n", timmy.weight);
- return 0;
- }
从上面的结果来看, 将结构当作参数传入函数。在函数内部修改传入的参数。 很显然,由于实参 timmy 与实参 per 是相互独立的。修改函数 change 内的 per 无法改动实参 timmy。
- struct person{
- char name[20];
- int gender;
- double height;
- double weight;
- };
-
- void change(struct person *per)
- {
- strcpy(per->name, "david");
- per->gender = 1;
- per->height = 175.00;
- per->weight = 65.00;
- }
-
- int main()
- {
- struct person timmy = {"timmy", 1, 170.00, 60.00};
- change(&timmy);
- printf("%s\n", timmy.name);
- printf("%d\n", timmy.gender);
- printf("%.2f\n", timmy.height);
- printf("%.2f\n", timmy.weight);
- return 0;
- }
从上图结果看,如果将 change 函数的参数改为指向结构的指针,情况就大不相同了。在函数 change 内部可以通过指针,找到结构变量 timmy 。并且对其进行修改。最后,将一个结构从函数返回也是可以的。从函数返回了david的数据,并且在将其赋值给了timmy。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。