関数の戻り値に構造体を設定する
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
