動的配列の構造体

(追記)あれ?!なんかやっぱりおかしかったんで、一部訂正。コンパイルは通ったでしょうけど、この方があってますよね?線消ししたところが、訂正です。

前回は恥をかきましたが、実際はこれをしたかったのです。

構造体の動的配列を関数間で渡そうと思ってたんですが、
ここんとこ毎日17〜8時間で、その上後輩の教育をやってて
思考回路がおかしくなってしまってました。(^^;
まぁ、完全にいいわけですけど。。。。w(/・ω・\) ハズカシイ♪

っというわけで(どういうわけだか・・・・)、
構造体の動的配列を以下のソースに書いてみました。

構造体配列のポインタを確保してから、
一端、全ての構造体メモリを確保し、
配列ポインタとをリンクさせる。

文字列ならしょっちゅうやるのですが、
構造体でこういうのをあまりやったことなかったのでね。。。。。

いかがソースです。ご自由にお使いください。


#include
#include
#include

typedef struct param{
int id;
char cd[2+1];
} param;

param *test(param** p,int n){

param* a=(param*)malloc(sizeof(struct param)*n);
*p=(param *)malloc(sizeof(struct param *)*n);

for (int i=0;iid=10 + i;
sprintf(p[i]->cd,"%d",20+i);
}

for (int i=0;iid,i,p[i]->cd);
}
return *p;
}

int main(int argc, char *argv[]) {
param *p1,*p2;
int n=3;

p1=NULL;
p2=NULL;

p2=test(&p1,n);

if (p1 != NULL) {
for (int i=0;i

表示結果:


func[0]:10 func[0]:20
func[1]:11 func[1]:21
func[2]:12 func[2]:22
p1[0]:10 p1[0]:20
p1[1]:11 p1[1]:21
p1[2]:12 p1[2]:22
p2[0]:10 p2[0]:20
p2[1]:11 p2[1]:21
p2[2]:12 p2[2]:22

これでどうだ!!<( ̄- ̄)> エッヘン!