スポンサーリンク
関数の戻り値に構造体を設定する
returnの戻り値に構造体をセットすればできますね。
呼び出し元で、戻り値を受け取ります。
下記がサンプルコードになります。
$ cat sample.c #include <stdio.h> #define SIZE 5 typedef struct{ int m_d1; int m_d2; }st_t; st_t init(){ st_t st; st.m_d1 = 456; st.m_d2 = 789; return st; } int main(){ st_t st; st = init(); printf("%d ", st.m_d1); printf("%d ", st.m_d2); return 0; }
下記が実行結果になります。
$ gcc -o sample sample.c $ ./sample 456 789
スポンサーリンク
構造体を引数にセットする
呼び出し元で、戻り値を受け取る際に、コピーが発生してしまうので、
関数の引数に構造体をセットする方法をよく使います。
参考:[c言語]関数の引数に構造体を渡す場合の注意(サンプルコードあり)
下記がサンプルコードになります。
$ cat sample2.c #include <stdio.h> #define SIZE 5 typedef struct{ int m_d1; int m_d2; }st_t; void init(st_t* pSt){ pSt->m_d1 = 89; pSt->m_d2 = 67; return; } int main(){ st_t st; st_t* pSt= &st; init(pSt); printf("%d ", pSt->m_d1); printf("%d ", pSt->m_d2); return 0; }
下記が実行結果になります。
$ gcc -o sample sample2.c $ ./sample 89 67
スポンサーリンク