• ベストアンサー

node* ってなんなのでしょうか?

C初学者です。 2分探索木のプログラムをCで組もうと思っており、いろんなサイト様に乗っている ソースなどを参考にしているのですが自分の知らない表現があります。 たとえば各値を管理する構造体をnodeとすると、値を探す関数searchの宣言で node* search(node* root,int val) のような文があるのですがnode* とはどういう書き方なのでしょうか。 手元にある初学者向けの本で調べては見たのですが載っていないようです。 (node *rootならともかくnode* rootがわかりません。  つまりnodeという型の横に*をつけるという文法がわからないのです。  実際にそのプログラムがどう動くか、などを聞いているわけではありません。) どうかよろしくお願いいたします。 ちなみに以下のようなごく簡単な?ポインタの使い方はどうにかわかっています(多分)。 /* 2つの変数の値を交換する */(mainなどは略) int n1,n2,temp; int *p1=&n1,*p2=&n2; temp = *p1; *p1 = *p2; *p2 = temp;

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

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.2

node* root という書き方は、ご想像通りポインタですが、C言語ではなくC++の書き方です。 C++ではポインタも”参照型”という変数型であるかのように、 C言語で int *p; と書くものを、int* p; と書くことができます。 ポインタの扱い方は変わりません。 C++の話ですから、C言語の本を読んでも記述が見つからなくて当然だと思います。

GunJack
質問者

お礼

なるほどです。理解できました!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1の方の仰るように node* root; node *roor; は、同じです。 意味合いとしては、node* という型だと強調したいというような意味合いがあるように思います。 しかしながら、C言語では、 node* root, second; と書いた場合、 node *root; node *second; のように思えるけれども 実際は node *root; node second; の意味なので、反って紛らわしいと思います。 そういう意味では、typedef でNODEP 型を作っておくといいかと思います。 ならば、 NODEP root,second; と書いても問題ありません。

GunJack
質問者

お礼

ありがとうございました!

回答No.1

node* root node *root node * root これらは全部同じです。敢えて言えばC++だと「node* root」と書くことが多いみたいです。

GunJack
質問者

お礼

すばやいご返答ありがとうございます。助かりました。

関連するQ&A