Для доступа вам необходимо разыменовать указатель, возвращаемый выражением a-> y, чтобы манипулировать указанным значением. Для этого используйте унарный оператор *:
Вам также нужно выделить память для y, чтобы убедиться, что она указывает на что-то:
a->y = malloc(sizeof(int));
...
*(a->y) = 12;
...
printf("%d %d", a->x,*(a->y));
И обязательно освободите данные malloc'd в обратном порядке, это был malloc'd
free(a->y);
free(a);