- ベストアンサー
関数から配列を返すには?
return で配列を返すにはどうしたらよいのでしょうか。 例えば以下のような場合です。 int main (){ char Value[] = "999"; int a; a = test(Value); printf ("%d", a); } int test(char *Value) { int nVal[255]; ここで nVal に適当な処理をして・・・ return Value; } int a を配列とかにしてみましたけど、コンパイラが 通りません。 要は配列数値を main で受け取って表示したいのですが、 本日C言語はじめたところなので、教えていただければありががたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
戻り値は1つしか戻せません。 引数で配列の先頭のポインタが渡され、それを使って関数で配列の中身を 書き換えて戻ってきて、メインで配列を参照すればいいです。 参考urlの(3)を参考にしてください。
その他の回答 (3)
- MovingWalk
- ベストアンサー率43% (2233/5098)
配列を関数の戻り値にするには、関数の型をポインタ型にする必要があります。 無理に書けばこんな感じでしょうね。 int main (void) { char Value[] = "999"; int *a; /* ポインタ型の変数 */ a = test(Value); printf ("%d,%d\n", a[0],a[255]); } int *test(char *Value) { static int nVal[255];/* staticでなければmain()で参照できない */ ここで nVal に適当な処理をして・・・ nVal[0]=1000;/* 単なる確認用です */ nVal[255]=1255; return nVal;/* ポインタ型 */ }
お礼
ありがとうございました。 配列はポインタで扱う、のが基本なのですね。 また一歩前進した、という感じです。 ソースまで書いていただき、感謝です。
- uyama33
- ベストアンサー率30% (137/450)
#include <stdio.h> char * test(char *Value); int main (){ char Value[] = "999"; char * a; a = test(Value); printf ("%S", a); 怪しいしばらく使ったことがない } char * test(char *Value) { int nVal[255]; ここで nVal に適当な処理をして・・・ return Value; }
お礼
ありがとうございます。 初心者の質問にお付き合いくださいまして、誠に感謝です。
- oui1012
- ベストアンサー率25% (25/97)
nValが何をするものなのか よく分からないんですけど… とりあえず動くソースを書いてみました. returnで配列を返すことはできません. (配列という変数型の概念がないから) 配列処理を行うには, ・あらかじめ器を用意しておく (Value[256]のこと) ・ポインタを関数に渡してやり, その中身に対して処理を行う. という手順になります. ~~~~~~~~ int main (void){ char Value[256]; int a; test(Value); printf ("%d %d\n", Value[0], Value[255]); } void test(char *Value) { int nVal[256]; nVal[0] = 1; nVal[255] = 256; *(Value + 0) = nVal[0]; *(Value + 255) = nVal[255]; return; }
お礼
ありがとうございます。 最大の謎だった、 > returnで配列を返すことはできません. がここではっきりとわかり、少し頭の整理がつきました。 Cは大変ですね・・・ 私の VC++6.0 で、*(Value + 0) のところで、何故かコンパイルが通らないのですが・・・でも、ちょっと自分で勉強してみます。
お礼
わかりやすいページを御紹介いただきまして、ありがとうございます。何度もみなおして、概念が少しわかりました。まさか短時間でこんなに回答いただけるとはおもっていなかったので、少し感激しております。