2016-05-07 32 views
0

CodeAとCodeBの違いは何ですか?構文はどちらも正しいので、両方のコードが元のポインタ "head"を変更できるようです。ポインタへの参照対参照渡し?

私が間違って

コードAだなら、私を修正してください:(参照渡し)

NodeType *head = new NodeType(); 
insertNode(*head, val); 
void insertNode(NodeType &head, int val) {} 

コードB:(ポインタへの参照)

NodeType *head = new NodeType(); 
insertNode(head, val); 
void insertNode(NodeType *&head, int val) {} 

EDIT コードAが望ましい状況を追加したいと思いますか?

+0

これらは同じではありません。 'CodeB'では' head'ポインタ(どこにポイントしていますか)を変更できます。 – PcAF

答えて

4

両方のコードは、元のポインタ「頭」

間違っを修正することができるようになりますようです。コードBのみがheadポインターを変更できます。コードAは、ポインタではなくheadが指すNodeTypeオブジェクトを受け取ります。

どのような状況コードAが好ましいか、その逆ですか?

コードAは、関数がNodeTypeオブジェクトのみを必要とする場合に適しています。

コードBは、関数がポインタ値を変更する必要がある場合に適しています。別のNodeTypeオブジェクトを指すように変更します。

+0

ok、コードAはnodetypeオブジェクトを受け取ったので、元の "head"ポインタが指すポインタと同じオブジェクトです。コードAからオブジェクトを変更すると、元のオブジェクトポイントをヘッドで変更することができます。私が間違っているなら、私を修正してください。 上記が正しい場合、コードAとコードBの両方が元のオブジェクトを変更できます。 –

+0

@ Mr.Y Correct。唯一の違いは、NodeTypeオブジェクトを変更できることに加えて、コードBが渡されたポインタの値を変更できることです。 – emlai