ポインタを使って構造体の配列を戻り値にするには
関数の戻り値を構造体の配列(アドレスを受け渡しを利用して)にしたいのですがうまくゆきません。
以下のプログラムではコンパイルはできるのですが、
a0 = 2
a1 = 4198512
a2 = 4329332
と表示されてしまいa1,a2がうまくゆきません。
*********************************************
#include<stdio.h>
struct test{
int a;
};
struct test *func(void);
void main(void)
{
struct test *data;//構造体ポインタ
int i;
data = func(); //ポインタにtest関数の戻り値(アドレス)を代入
for(i=0;i<=2;i++){
printf("a%d = %d\n",i,(data+i)->a); //構造体要素を表示
}
}
struct test *func(void)
{
struct test data[3]={1,2,3}; //構造体配列を定義
return (&data[0]); //構造体配列の先頭アドレスを返す
}
*************************************************
test関数から受ける取ったアドレス(&data[0])をポインタ(data)に代入して1づつずらして表示させれば
a0=1,a1=2,a=3
となると思ったのですがどこが間違っているのでしょうか?
よろしくお願いします。