Yes, possibly starting with C99. Your hunch was very close; but you need to provide a simplified initializer, even if you plan to assign a different value later:
struct S test = { &(int){0}, &(float){0} };
This function is called a composite literal . An adjacent literal is an lvalue.
, testfunc ; a void *, *(test.a). S int *a; float *b;, , . *(int *)test.a = 5;.