またリストについて質問です・・・。度々すみません。
呼び出した関数内で動かしたノードを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);
}
質問です
Re:質問です
ここに書かれたコードを見た範囲では、単に、Check() の返値の型が、(本来は、struct NodeT * なのに) int になっているのでエラーになっているのではないかなと思います。
あと、関数は(関数に限りませんが)宣言してから使うことになります。
普通は、
NodeT *Check()
{ .... }
int main()
{ .... }
の順番の方が良いと思います。
この順番で不都合が起こる場合、プロトタイプ宣言が必要になります。
NodeT *Check(NodeT *current);
int main()
{ .... }
NodeT *Check(NodeT *current)
{ .... }
こんな感じ。
プロトタイプ宣言は、ヘッダファイルのほうに入っていることも多々あります。
関数の返値が int の場合、Cではプロトタイプ宣言が省略できることもありますが(C99 ではできなかったはず)、返値が int でない場合、プロトタイプ宣言がないと、確実にこけます(または、関数の2重定義だというエラーが出ます)
あと、関数は(関数に限りませんが)宣言してから使うことになります。
普通は、
NodeT *Check()
{ .... }
int main()
{ .... }
の順番の方が良いと思います。
この順番で不都合が起こる場合、プロトタイプ宣言が必要になります。
NodeT *Check(NodeT *current);
int main()
{ .... }
NodeT *Check(NodeT *current)
{ .... }
こんな感じ。
プロトタイプ宣言は、ヘッダファイルのほうに入っていることも多々あります。
関数の返値が int の場合、Cではプロトタイプ宣言が省略できることもありますが(C99 ではできなかったはず)、返値が int でない場合、プロトタイプ宣言がないと、確実にこけます(または、関数の2重定義だというエラーが出ます)