※ ChatGPTを利用し、要約された質問です(原文:ポインタを使って構造体の配列を戻り値にするには)
このQ&Aのポイント
ポインタを使って構造体の配列を戻り値にする方法を教えてください。
関数の戻り値を構造体の配列にするために、ポインタを利用してアドレスを受け渡す方法がうまくいきません。
プログラムを実行すると、a1とa2の値が正しく表示されず、うまくいっていません。どこが間違っているのでしょうか?
関数の戻り値を構造体の配列(アドレスを受け渡しを利用して)にしたいのですがうまくゆきません。
以下のプログラムではコンパイルはできるのですが、
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
となると思ったのですがどこが間違っているのでしょうか?
よろしくお願いします。
お礼
早速のご回答大変ありがとうございました。 非常に役にたちました。staticですか。なるほど(納得!)。