c - 如何为嵌入的结构赋值
问题描述
如果我有 2 个结构,其中一个结构用作其他结构的成员之一的数据类型,如果用作数据类型的结构已经分配值,我如何分配值。
typedef struct
{datatype *a;datatype b;datatype c;} structa;
typedef struct
{datatype a;structa *b;}structb;
structa A[]={{&a, b, c}, {&d, e, f}};
structb B={g, &A};
这个对吗?
解决方案
简短的回答:是的。
有一个简单的演示:
#include <stdio.h>
typedef struct A
{
int a1;
int a2;
} A;
typedef struct B
{
A ba;
A *pba;
int b1;
int b2;
} B;
int main(int argc, char *argv)
{
A a;
B b1, b2;
a = (A) {1, 2};
b1 = (B) {a, &a, 3, 4};
b2 = (B) {a, &a, 5, 6};
B bs1[] = {b1, b2};
B bs2[] = {(B){a, &a, 7, 8},(B){a, &a, 9, 10}};
printf("a: {%d, %d}, addr of a: %p\n", a.a1, a.a2, &a);
printf("b1: {{%d, %d}, %p, %d, %d}\n", b1.ba.a1, b1.ba.a2, b1.pba, b1.b1, b1.b2);
printf("b2: {{%d, %d}, %p, %d, %d}\n", b2.ba.a1, b2.ba.a2, b2.pba, b2.b1, b2.b2);
printf("bs1[0]: {{%d, %d}, %p, %d, %d}\n", bs1[0].ba.a1, bs1[0].ba.a2, bs1[0].pba, bs1[0].b1, bs1[0].b2);
printf("bs1[1]: {{%d, %d}, %p, %d, %d}\n", bs1[1].ba.a1, bs1[1].ba.a2, bs1[1].pba, bs1[1].b1, bs1[1].b2);
printf("bs2[0]: {{%d, %d}, %p, %d, %d}\n", bs2[0].ba.a1, bs2[0].ba.a2, bs2[0].pba, bs2[0].b1, bs2[0].b2);
printf("bs2[1]: {{%d, %d}, %p, %d, %d}\n", bs2[1].ba.a1, bs2[1].ba.a2, bs2[1].pba, bs2[1].b1, bs2[1].b2);
return 0;
}
代码的输出是:
a: {1, 2}, addr of a: 0x7fffb2040240
b1: {{1, 2}, 0x7fffb2040240, 3, 4}
b2: {{1, 2}, 0x7fffb2040240, 5, 6}
bs1[0]: {{1, 2}, 0x7fffb2040240, 3, 4}
bs1[1]: {{1, 2}, 0x7fffb2040240, 5, 6}
bs2[0]: {{1, 2}, 0x7fffb2040240, 7, 8}
bs2[1]: {{1, 2}, 0x7fffb2040240, 9, 10}
推荐阅读
- vb.net - 获取所有包含“/product/”的链接
- c++ - c++ 函数。使用循环
- c++ - 指向类的指针的 C++ 函数不起作用?
- pointers - 为什么修改 Rust 中的字符串变量时指针的地址不会改变?
- r - xtable在对齐后不隐藏行名或hline
- python - 在视频的特定时间提取帧并插入文本 OpenCV Python
- python - pandas:计算两个不同数据帧的列值之间的时间差
- python - 这是过拟合的情况吗?CNN图像分类器
- javascript - 在 DomContentLoaded 之前执行 JS?
- angular - Firebase Functions Deploy:解析函数触发器时出错