自信がないタイプなのでリプライつけないのだけど、引数でポインタを受け取ったあとそのアドレスを書き換えることができるとすれば、main 関数内で領域獲得した変数のアドレスを変更できることになってしまうので、なんとなくだけどできないイメージ…… ポインタ引き渡しで許可しているのはあくまでメモリ領域内のデータの書き換えだけに限定しないと、なんらかのバイオレーションが発生しそう。本当にポインタの変更が必要ならダブルポインタを使うべきな気がする。あと、関数名 init から推測するに、やることは構造体変数の初期化なので、アドレス書き換えじゃなくて中のデータを書き換えてあげないと、複数の同じ構造体データに対して利用できなくなる。
int main(void) {
struct st1, st2;
init(&st1);
init(&st2);
}
した場合に、どちらも同じアドレスに書き換えられて、init 関数の役目を果たさない気がする。