赞
踩
在C语言中经常出现结构体作为结构体的成员变量的情况,如链表
结构体作为成员变量有时可能是在其他文件中进行了声明,这里简单的以在同一个文件中表示进行介绍。
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.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;
通过结构体指针间接的对结构体中每个成员进行赋值,结构体变量做为一个成员变量可以整体赋值,也可以对结构体内部的变量单独赋值。
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 #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 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。