The same way you did, via the name of the member: my_test.test2.b = 'x';
The unnamed struct provides the type for a member named test2. Doing it this way saves you the trouble of defining the struct externally and giving it a name. It's identical to this, except in this example you can reuse the struct definition:
struct crappyname {
char b;
float c;
};
struct test {
int a;
struct crappyname test2;
double d;
};