エラーは次のとおりです。構造体または共用体ではないメンバー '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);
ポインターからデータへのアクセスを開始する前に、まずメモリを割り当てる必要があります。それ以外の場合は、未定義の動作です。現在の構造には 2 つのレベルの割り当てが必要です。1 つは へのポインター用hola
で、もう1 つはhola
それ自体用です。s へのポインターへのポインターではなく、 s->
へのポインターで機能するため、別のレベルの逆参照を追加する必要もあります。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);
これはideoneのデモです。