プロが教える店舗&オフィスのセキュリティ対策術

関数の戻り値を構造体の配列(アドレスを受け渡しを利用して)にしたいのですがうまくゆきません。
以下のプログラムではコンパイルはできるのですが、
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

となると思ったのですがどこが間違っているのでしょうか?
よろしくお願いします。

A 回答 (1件)

struct test data[3]={1,2,3};



auto変数は関数からの脱出時になくなってしまいます。

static struct test data[3]={1,2,3};

静的変数として宣言しましょう。


return (&data[0]); //構造体配列の先頭アドレスを返す
ここは
return (data); //構造体配列の先頭アドレスを返す
こうじゃないと警告が出ませんか?
    • good
    • 0
この回答へのお礼

早速のご回答大変ありがとうございました。
非常に役にたちました。staticですか。なるほど(納得!)。

お礼日時:2002/09/09 01:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!