带有指针的结构和C中的结构数组

时间:2018-11-04 15:27:22

标签: c arrays pointers struct nested

我正在尝试学习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);

2 个答案:

答案 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"}
]