目录
问:我们都该如何去访问该结构体里面的结构体的成员呢?怎么去给里面的成员赋值呢?
结构体内嵌套结构体
背景:如果我们在结构体中放结构体,我们可以不写结构体里面结构体的结构体标签,但是我们可以定义结构体里面结构体的变量,定义里面结构体定义变量与不定义变量的表示方式。
问:我们都该如何去访问该结构体里面的结构体的成员呢?怎么去给里面的成员赋值呢?
如果是定义了里面结构体的变量 那么表达里面的成员语法,例如
#include<stdio.h>
struct node
{
int a;
struct
{
int b;
}x;
};
int main()
{
struct node p;
p.x.b = 100;也就是表示了结构体变量p里面结构体的成员。
}
当一个结构体a被用作另一个结构体b的内部成员,并且在外部不直接使用结构体a时,通常可以省略结构体a的标签(即结构体名)。这种情况下,结构体a作为一个匿名结构体嵌套在结构体b中。
#include<stdio.h>
struct node
{
int a;
struct
{
int b;
};//匿名的结构体 可以直接访问里面的成员。
};
int main()
{
struct node p;
p.b = 100;也就是表示了结构体变量p里面结构体的成员。
}
说明:
-
在上面的代码中,node 包含了一个匿名的结构体(即没有给这个内部结构体起名字),这个匿名结构体有成员 b
-
由于这个内部结构体没有被外部直接使用,所以可以省略它的标签。
-
在使用时,可以直接通过struct node 的实例 p 来访问匿名结构体的成员,例如p.b。
这种写法在嵌套结构体时可以简化代码,避免不必要的标签定义,使代码更加简洁。
如果在结构体中定义了一个内部的结构体,并且给这个内部结构体起了一个变量名,那么你可以通过这个变量名来访问内部结构体的成员。以下是一个示例代码,展示如何访问内部结构体的成员:#include <stdio.h>
// 定义结构体b,其中包含一个有名字的内部结构体a
typedef struct {
int x;
int y;
struct { // 这里定义了一个内部结构体
int width;
int height;
} a; // 给内部结构体起了一个变量名 a
} struct_b;int main() {
struct_b b;
b.x = 10;
b.y = 20;
b.a.width = 100; // 通过变量名 a 访问内部结构体的成员 width
b.a.height = 200; // 通过变量名 a 访问内部结构体的成员 heightprintf("x: %d, y: %d, width: %d, height: %d\n", b.x, b.y, b.a.width, b.a.height); return 0;
}
说明:
- 内部结构体的变量名:
- 访问内部结构体的成员:
运行上述代码后,输出结果如下:
x: 10, y: 20, width: 100, height: 200
总结:当内部结构体有变量名时,可以通过 外层结构体实例.内部结构体变量名.内部结构体成员 的方式来访问内部结构体的成员。这种方式明确了成员的层次关系,使代码更加清晰。