错误是:请求成员“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;
}
为此,您将需要更复杂的语法:
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);
在开始从指针访问数据之前,您需要先分配一些内存;否则,这是未定义的行为。您当前的结构需要两级分配 - 一个用于指向 的指针hola
,另一个用于hola
自身。您还需要添加另一个级别的取消引用,因为->
适用于指向struct
s 的指针,而不是指向指向struct
s 的指针的指针:
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);