栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

结构体中含有结构体成员变量

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

结构体中含有结构体成员变量

目录
  • 1. 结构体成员变量介绍
    • 1.1 结构体成员变量的形式
    • 1.2 结构体中含结构体变量的优缺点
  • 2. 结构体成员变量赋值
    • 2.1直接赋值
    • 2.2通过指针赋值
  • 3. 示例代码

1. 结构体成员变量介绍

在C语言中经常出现结构体作为结构体的成员变量的情况,如链表

1.1 结构体成员变量的形式

结构体作为成员变量有时可能是在其他文件中进行了声明,这里简单的以在同一个文件中表示进行介绍。

  3 struct score
  4 {
  5     float math;
  6     float chinese;
  7     float englise;
  8     float physical;
  9 };
 10 
 11 typedef struct score SCORE;
 12 
 13 struct node
 14 {
 15     SCORE data;
 16     int id;
 17     char* name;
 18 };
 19 
 20 typedef struct node lnode;

如上面的代码所示,在结构体node中score结构体作为成员变量,这种形式有比较清晰的层次关系。

1.2 结构体中含结构体变量的优缺点

优点:从上面的1.1节代码中可以看到,将所有分数相关的成员放入一个结构体中,然后将这个结构体又作为一个成员变量放入另一个结构体中。这中方式可以使得结构层次清晰明朗,同一类的信息放入一个结构体,在使用时比较清晰。
缺点:需要使用某个结构体中的成员变量时需要多级包含

2. 结构体成员变量赋值 2.1直接赋值

直接赋值也有两种方式,一种是直接在定义时就赋值,把结构体当做一个整体进行赋值

lnode ln2 = {{1002,"wujing",78,98},88,NULL};

另一种是先定义里面的结构体,然后将其当做一个成员进行赋值

ST s1 = {1001,"wangj",98,82};
lnode ln1;
ln1.data = s1;
ln1.english = 92;
ln1.next = NULL;
2.2通过指针赋值

通过结构体指针间接的对结构体中每个成员进行赋值,结构体变量做为一个成员变量可以整体赋值,也可以对结构体内部的变量单独赋值。

lnode ln3;
lnode* p = NULL;
p = &ln3;
p->english = 66;
p->data.id = 1003;
p->data.name = "Lihai";
p->data.math = 76;
p->data.chinese = 86;
p->next = NULL;
3. 示例代码
  1 #include 
  2 
  3 struct student
  4 {   
  5     int id;
  6     char* name;
  7     int math;
  8     int chinese;
  9 };
 10 
 11 typedef struct student ST;
 12 
 13 struct node
 14 {   
 15     ST data;
 16     int english; 
 17     struct node* next;
 18 };
 19 
 20 typedef struct node lnode;
 21 
 22 int main()
 23 {
 24     lnode ln2 = {{1002,"wujing",78,98},88,NULL};
 25     printf("ln2.data.id = %d, ln2.data.name = %s, ln2.data.math = %d, ln2.da    ta.chinese = %d, ln2.english = %d, ln2.next = %#lxn", ln2.data.id, ln2.data    .name, ln2.data.math, ln2.data.chinese, ln2.english, ln2.next);
 26 
 27     ST s1 = {1001,"wangj",98,82};
 28     lnode ln1;
 29     ln1.data = s1;
 30     ln1.english = 92;
 31     ln1.next = NULL;
 32     printf("ln1.data.id = %d, ln1.data.name = %s, ln1.data.math = %d,ln1.dat    a.chinese = %d, ln1.english = %d, ln1.next = %#lxn", ln1.data.id, ln1.data.    name, ln1.data.math, ln1.data.chinese, ln1.english, ln1.next);
 33 
 34     lnode ln3;
 35     lnode* p = NULL;
 36     p = &ln3;
 37     p->english = 66;
 38     p->data.id = 1003;
 39     p->data.name = "Lihai";
 40     p->data.math = 76;
 41     p->data.chinese = 86;
 42     p->next = NULL;
 43     printf("ln3.data.id = %d, ln3.data.name = %s, ln3.data.math = %d,ln3.dat    a.chinese = %d, ln3.english = %d, ln3.next = %#lxn", ln3.data.id, ln3.data.    name, ln3.data.math, ln3.data.chinese, ln3.english, ln3.next);
 44 }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号