- ベストアンサー
構造体の配列のアロケート方法とダブルポインタでの扱い方
- 構造体の配列をダブルポインタで返す関数を作成する方法や、アロケートの仕方について分からないという質問です。構造体の配列を作成するためのアロケート方法や、forループを使って配列を参照する方法を教えてください。
- Webでの検索では求める情報が得られなかったため、こちらで質問させていただいています。例としてコードを提示しており、アロケートや配列の参照について具体的な説明を求めています。
- 回答では、構造体の配列を作成する際のアロケート方法や、配列の参照方法について詳しく説明してください。また、ポインタやforループの基本的な使い方も合わせて教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct member{ int id; char* name; } member_t; int get_result(member_t *pobj){ pobj->id = 100; pobj->name = strdup("nakayama"); return 0; } #define SIZE 10 int get_resultList(member_t **ppobj){ int i; char buff[32]; *ppobj=(member_t*)calloc(SIZE, sizeof(member_t)); for(i=0;i<SIZE;i++){ (*ppobj)[i].id=1000+i+1; sprintf(buff,"name%02d",i+1); (*ppobj)[i].name=strdup(buff); } return 0; } void main(){ member_t m; member_t *obj; int i; get_result(&m); printf("id:%d,name:%s\n", m.id, m.name); get_resultList(&obj); for(i=0;i<SIZE;i++){ printf("[%d]\n",i+1); printf("ID : %d\n", obj->id); printf("NAME : %s\n", obj->name); free(obj->name); // free(obj); obj++; } free(obj); }