当struct的属性是指向另一个struct的指针时

时间:2014-04-23 01:26:29

标签: c arrays pointers struct

(使用C) 如果我想调用结构的给定属性,我只需使用符号struct.attribute。但是,有时,有问题的属性是指向另一个结构的指针。在这种情况下,我将使用struct.pointer_to_struct。 那么,我如何调用指向的结构的属性?编写:struct.pointer_to_struct->属性似乎合乎逻辑,但编译器不接受这一点。 这是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct thing
{
        char gender[6];
        char name[21];
        struct thing **friends;
};

int main(void)
{
        struct thing things[3];

        strncpy(things[0].name, "Bob", 21);
        strncpy(things[1].name, "Kelly", 21);
        strncpy(things[1].gender, "Female", 6);

        things[0].friends = &things[1];

        printf("%s is friends with %s\n", things[0].name, things[0].friends->name);

        return 0;
}

行printf(“%s是%s的朋友\ n”,东西[0] .name,东西[0] .friends-&gt; name);由于事物[0] .friends-&gt;名称而没有编译。 我想找到一些方式说“鲍勃是凯莉的朋友”,当时仅针对鲍勃进行编码。

2 个答案:

答案 0 :(得分:1)

这不是指向struct&#34;的指针。但是一个&#34;指向struct&#34;,a.k.a。和#34;指向struct(s)指针数组的指针的指针&#34;:

struct thing **friends;

因此您需要打印

things[0].friends[0]->name
第一位朋友

,第二位朋友friends[1]->name,依此类推。

(但是因为你没有任何&#34;朋友数量和那里的整数变量,所以可能很难使用它。你也是以错误的方式填充变量,你会需要创建一个额外的数组,其中包含指向朋友的各个指针,例如在堆上。)

答案 1 :(得分:0)

struct thing
{
        char gender[6];
        char name[21];
        struct thing **friends; // why thing **
};

它应该是,

struct thing *friends而非struct thing **friends