如何使用指针访问结构中列表中的结构?

时间:2017-05-09 23:45:50

标签: c pointers struct

我给了一个数字i,并且指向一个包含结构列表的结构的指针,基本上我要做的就是遍历所有列表并查看其中的哪个结构具有该数字岛

typedef struct struct1 { int num; } struct1;

typedef struct struct2 {
  struct1 somestruct1;
  struct2 *pnext;
} struct2;

struct struct3 {
  struct2 somestruct2;
};

我是编码的新手,我似乎无法解决这个问题,这里是我尝试访问某些struct1中的num字段的方法指向struct3

的指针
struct3 temp->somestruct2.somestruct1.num ;

3 个答案:

答案 0 :(得分:0)

struct3 s3;

int num = s3.somestruct2.somestruct1.num;

struct3 *s3;

int num = s3->somestruct2.somestruct1.num;

答案 1 :(得分:0)

似乎您的困惑可能是由于是否使用"。"或者" - >"

这是一般规则......

如果左侧的项目是指针,请使用" - >"。如果它不是指针,请使用"。"。

如果" temp"定义" struct struct3 temp",然后temp不是指针。因此,应该跟随"。"访问临时的子元素

临时子元素" somestruct1"也没有在struct2中定义为指针;因此,要访问somestruct1的子元素,它后面应该跟一个"。"。

temp.somestruct2.somestruct1.num

答案 2 :(得分:0)

这是一个如何做到这一点的例子。

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

typedef struct struct1 { int num; } struct1;

typedef struct struct2 {
  struct1 somestruct1;
  struct struct2 *pnext;
} struct2;

struct struct3 {
  struct2 somestruct2;
};

int main()
{
    struct struct3* s = malloc(sizeof(struct struct3));

    s->somestruct2.somestruct1.num = 1;
    printf("%d\n", s->somestruct2.somestruct1.num);

    free(s);
}

每当你有一个指针时,你必须取消引用它,然后才能使用它指向的东西。取消引用运算符是一元*,然后是.来访问结构成员。

你可以这么长时间地写

(*s).somestruct2.somestruct1.num = 1;

这是一个非常常见的操作,它也非常难看,因此组合它们的运算符是->,因此

s->somestruct2.somestruct1.num = 1;