【初月無料キャンペーン中】gooドクター

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言語はじめたところなので、教えていただければありががたいです。

gooドクター

A 回答 (4件)

戻り値は1つしか戻せません。


引数で配列の先頭のポインタが渡され、それを使って関数で配列の中身を
書き換えて戻ってきて、メインで配列を参照すればいいです。

参考urlの(3)を参考にしてください。

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec11-3.html
    • good
    • 1
この回答へのお礼

わかりやすいページを御紹介いただきまして、ありがとうございます。何度もみなおして、概念が少しわかりました。まさか短時間でこんなに回答いただけるとはおもっていなかったので、少し感激しております。

お礼日時:2003/09/01 00:09

配列を関数の戻り値にするには、関数の型をポインタ型にする必要があります。


無理に書けばこんな感じでしょうね。

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;/* ポインタ型 */
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
配列はポインタで扱う、のが基本なのですね。
また一歩前進した、という感じです。
ソースまで書いていただき、感謝です。

お礼日時:2003/09/01 00:10

#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;

}


 
    • good
    • 0
この回答へのお礼

ありがとうございます。
初心者の質問にお付き合いくださいまして、誠に感謝です。

お礼日時:2003/09/01 00:07

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;
}
    • good
    • 2
この回答へのお礼

ありがとうございます。
最大の謎だった、
> returnで配列を返すことはできません.
がここではっきりとわかり、少し頭の整理がつきました。
Cは大変ですね・・・

私の VC++6.0 で、*(Value + 0) のところで、何故かコンパイルが通らないのですが・・・でも、ちょっと自分で勉強してみます。

お礼日時:2003/09/01 00:06

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング