当前位置:   article > 正文

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

结构体成员变量

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;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

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

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

2. 结构体成员变量赋值

2.1直接赋值

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

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

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

ST s1 = {1001,"wangj",98,82};
lnode ln1;
ln1.data = s1;
ln1.english = 92;
ln1.next = NULL;
  • 1
  • 2
  • 3
  • 4
  • 5

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3. 示例代码

  1 #include <stdio.h>
  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 = %#lx\n", 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 = %#lx\n", 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 = %#lx\n", ln3.data.id, ln3.data.    name, ln3.data.math, ln3.data.chinese, ln3.english, ln3.next);
 44 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/730760
推荐阅读
相关标签
  

闽ICP备14008679号