如何从c中的另一个结构访问结构的双指针

时间:2013-02-12 01:25:32

标签: c pointers structure

错误是:请求成员'a',而不是结构或联合。

#include<stdio.h>

typedef struct mia {
    int a;
}hola;

typedef struct m {
    hola **r;
}bic;

int main() {
    bic y;
    scanf("%d", &(y.r->a));
    printf("%d", (y.r->a));
    return 0;
}

2 个答案:

答案 0 :(得分:2)

你需要一个更复杂的语法:

int main()
{
    hola x;
    hola *ptr = &x;
    bic y = { &ptr };

    scanf("%d", &((*y.r)->a));
    printf("%d\n", (*y.r)->a);
    printf("%d\n", ptr->a);
    printf("%d\n", x.a);

    return 0;
}

<强>输入

100

<强>输出

100
100
100

请注意,您可以取出hola *指针:

hola *ptr = *y.r;
printf("%d", ptr->a); 

答案 1 :(得分:2)

在开始从指针访问数据之前,您需要先分配一些内存;否则,它是未定义的行为。您当前的结构需要两个级别的分配 - 一个用于指向hola,另一个用于hola本身。您还需要添加另一级解除引用,因为->适用于指向struct的指针,而不是指向指向struct的指针:

bic y;
y.r = malloc(sizeof(hola*));
*y.r = malloc(sizeof(hola));
// You need an extra level of dereference (i.e. an asterisk)
scanf("%d", &((*y.r)->a));
printf("%d", ((*y.r)->a));
// Don't forget to free the memory you allocated,
// in reverse order:
free(*y.r);
free(y.r);

这是demo on ideone