如果我有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};
这是对的吗?
答案 0 :(得分:0)
简短回答:是的。
有一个简单的演示:
#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}
答案 1 :(得分:-1)
简短回答:不。
Medium answere:foo.c:8:15:警告:从不兼容的指针类型初始化[-Wincompatible-pointer-types]
长答案:&amp; A是structa数组的地址,是指向structa数组的指针。但是structb只需要一个指向structa的指针。否则就是对的。