- ベストアンサー
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;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
node* root という書き方は、ご想像通りポインタですが、C言語ではなくC++の書き方です。 C++ではポインタも”参照型”という変数型であるかのように、 C言語で int *p; と書くものを、int* p; と書くことができます。 ポインタの扱い方は変わりません。 C++の話ですから、C言語の本を読んでも記述が見つからなくて当然だと思います。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1の方の仰るように node* root; node *roor; は、同じです。 意味合いとしては、node* という型だと強調したいというような意味合いがあるように思います。 しかしながら、C言語では、 node* root, second; と書いた場合、 node *root; node *second; のように思えるけれども 実際は node *root; node second; の意味なので、反って紛らわしいと思います。 そういう意味では、typedef でNODEP 型を作っておくといいかと思います。 ならば、 NODEP root,second; と書いても問題ありません。
お礼
ありがとうございました!
- SoaringPenguin
- ベストアンサー率27% (22/79)
node* root node *root node * root これらは全部同じです。敢えて言えばC++だと「node* root」と書くことが多いみたいです。
お礼
すばやいご返答ありがとうございます。助かりました。
お礼
なるほどです。理解できました!