質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いさご

質問です

#1

投稿記事 by いさご » 18年前

またリストについて質問です・・・。度々すみません。

呼び出した関数内で動かしたノードをMainに返したいのですが、やり方がわかりません。
試してもエラーばかりで困ってます。ポインタがよく理解できてなくて・・・。
どなたか教えていただけませんか?お願いします。

簡単に書くと今こんな感じになってます。

typedef struct NodeT {
int data;
struct NodeT * next;
} Node;

int main();
  Node *current;
current=Check(current);
return(0);
}

int Check(Node *current){
//いろいろ動かしてから
return(current);
}

YuO

Re:質問です

#2

投稿記事 by YuO » 18年前

エラーを書いてもらえると,問題点がわかるかもしれません。

とりあえず,Check関数の戻り値の型はNode *にしないといけません。

なぎ

Re:質問です

#3

投稿記事 by なぎ » 18年前

ここに書かれたコードを見た範囲では、単に、Check() の返値の型が、(本来は、struct NodeT * なのに) int になっているのでエラーになっているのではないかなと思います。

あと、関数は(関数に限りませんが)宣言してから使うことになります。

普通は、

NodeT *Check()
{ .... }

int main()
{ .... }

の順番の方が良いと思います。

この順番で不都合が起こる場合、プロトタイプ宣言が必要になります。

NodeT *Check(NodeT *current);

int main()
{ .... }

NodeT *Check(NodeT *current)
{ .... }

こんな感じ。
プロトタイプ宣言は、ヘッダファイルのほうに入っていることも多々あります。

関数の返値が int の場合、Cではプロトタイプ宣言が省略できることもありますが(C99 ではできなかったはず)、返値が int でない場合、プロトタイプ宣言がないと、確実にこけます(または、関数の2重定義だというエラーが出ます)

いさご

Re:質問です

#4

投稿記事 by いさご » 18年前

回答してくださった方々、ありがとうございます!
Check関数の返値を変更したらエラーでなくなりました。
関数が何を返すかに合わせなきゃいけなかったんですね・・・!
ひとつ覚えました。ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る