我正在尝试学习C中的嵌套结构和指针。我将其作为测试:
typedef struct xyz xyz_t;
struct xyz{
int x, y, z;
};
xyz_t array[] = {
{.x = 14, .y = 16, .z = 18},
{.x = 34, .y = 36, .z = 38},
{.x = 64, .y = 66, .z = 68},
};
typedef struct blue blue_t;
struct blue
{
int *pointer;
};
int main()
{
blue_t red;
red.pointer = &array;
printf("%d",red.pointer[1].z);
}
想法是让结构red
的指针指向array
,然后指向print f.ex. array[1].z
。
我在做什么错?编译器告诉我:
来自不兼容指针类型的分配
[-Wincompatible-pointer-types]
red.pointer = &array;
在非结构或联合中请求成员
x
printf("%d",red.pointer[2].x);
答案 0 :(得分:1)
这个想法是让结构'red'具有指向'array'的指针,然后打印f.ex。 array [1] .z。
在这种情况下,您需要在“蓝色”结构中有一个指向xyz_t
的指针。
struct blue
{
xyz_t *pointer;
};
您需要从此&
中删除red.pointer = &array;
。 array
将转换为指向red.pointer = array;
中第一个元素的指针,该指针是正确的类型(以匹配LHS),请参见What is array decaying?;而&array
的类型为struct xyz (*)[3]
。
此外,您可以为主要功能(int main(void)
)使用适当的签名。 red
可能是blue_t
类型的令人困惑的变量!
答案 1 :(得分:0)
此问题应得到解决。看看是否有帮助:
[
{"name": "brick"},
{"dim": "0.108"},
{"lamdbaValue": "0.610"},
{"zValue": "5.000"},
{"fireValue": "A"}
],
[
{"name": "brick"},
{"dim": "0.108"},
{"lamdbaValue": "0.800"},
{"zValue": "5.400"},
{"fireValue": "A"}
]