OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

二つ以上の値を返す関数

  • すぐに回答を!
  • 質問No.195294
  • 閲覧数387
  • ありがとう数1
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 74% (166/222)

たとえば、a,bという値を関数に入れて、関数の中で変わったa,bを受け取るような方法はないでしょうか。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=138798

int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

void func(int *x, int *y)
{
*x++;
*y++;
}
を実行してみましたが、
「関数 'func' は定義されていません。int 型の値を返す外部関数と見なします。」
と出てきました。
助言をよろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル7

ベストアンサー率 44% (11/25)

こんにちは。
「関数 'func' は定義されていません。int 型の値を返す外部関数と見なします。」
のメッセージは関数func()の型がわからないためコンパイラが勝手に関数func()はint型の関数として処理してしまったためです。
対処方法は以下の2通りあります。

1.明示的にプロトタイプ宣言をする。
void func(int *x, int *y); ← 追加する
int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

void func(int *x, int *y)
{
*x++;
*y++;
}

2.関数の記述順序を入れ替える。
void func(int *x, int *y)
{
*x++;
*y++;
}

int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

のどちらかでOKだと思いますよ。
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

関数 func() を使う前にプロトタイプ宣言、もしくは、関数の定義が必要です。 元のソースを尊重するならば、int main(void) の前に、 void func(int*, int*); と一行入れてみてください。コンパイル時の警告は無くなります。
関数 func() を使う前にプロトタイプ宣言、もしくは、関数の定義が必要です。

元のソースを尊重するならば、int main(void) の前に、

void func(int*, int*);

と一行入れてみてください。コンパイル時の警告は無くなります。


  • 回答No.3

関数をコールできるようになっても、 void func(int *x, int *y) { *x++; *y++; } これだと、値は変更されませんね。
関数をコールできるようになっても、

void func(int *x, int *y)
{
*x++;
*y++;
}

これだと、値は変更されませんね。
  • 回答No.4
レベル14

ベストアンサー率 50% (1122/2211)

kawa-k> これだと、値は変更されませんね。 ふっ、その通りですねえ。質問者の希望を満たすには、 (*x)++; (*y)++; などと、としなければなりませんね。 # こんなことに気がつかなかった、という意味で自信無し、にチェックしました (^^;
kawa-k> これだと、値は変更されませんね。

ふっ、その通りですねえ。質問者の希望を満たすには、

(*x)++;
(*y)++;

などと、としなければなりませんね。

# こんなことに気がつかなかった、という意味で自信無し、にチェックしました (^^;
  • 回答No.5
レベル6

ベストアンサー率 37% (3/8)

func()関数の中身については皆さんが 答えているようなことでいいと思います。 そこで、僕は関数の宣言についてちょっと疑問に思いました。 int main(void){ の行の上に void func(int* , int*); と記述されているでしょうか? 自分で作る関数は変数と同じで宣言が必要になってきます。 例えば、printfなどの関数はCに標準について ...続きを読む
func()関数の中身については皆さんが

答えているようなことでいいと思います。

そこで、僕は関数の宣言についてちょっと疑問に思いました。

int main(void){ の行の上に

void func(int* , int*);

と記述されているでしょうか?

自分で作る関数は変数と同じで宣言が必要になってきます。

例えば、printfなどの関数はCに標準についている関数なので

宣言は不要なのですが、自作関数(自分で作る関数)は宣言が必要なんです。

その辺のことがまったくかかれてないので

僕が書いてることは間違ってないのですが、

エラーの原因が関数の宣言にあるとは断定できないので”自信なし”です。

その辺のところ教えてください。
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ