スポンサーリンク

関数の戻り値に構造体を設定する

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  

スポンサーリンク