2016-07-31 15 views
0

質問に答えるサンプルコードを見ています。値がvalの整数のリンクリストからすべての要素を削除します。C++構文の質問(リンクされたリスト)

コードの最初の行はif (!head) return NULL;です。 (!head)の意味は何ですか?私はそれが(head == NULL)を意味すると仮定していますが、いつでもこの標準は(head == NULL)のようなものを言っていますか?コードのこの部分については


while (h->next){ 
     if (h->next->val == val){ 
      h->next = h->next->next; 

、なぜそれが!= NULL一部を含めないしても大丈夫でしょうか? (例:(h->next != NULL))明示的に状態を記述することなく、その部分が文に暗示されていますか?

+0

あります。あなたはそうではないと考えるかもしれません。これはリンクされたリストではありません。ほとんどの言語はこの単項演算子を持っています。 –

+0

これはC++の基本です。あなたはC++の本やその他のC++の他の機能についての幅広い議論を見つけることができなければなりません。これは、インタチューブで完全な見知らぬ人に聞くよりも完全な情報を提供します。 –

+0

要するに、 '0'に相当するものは' false'と解釈され、それ以外は 'true'と解釈されます。 '! 'はこれを反転させます。おそらく正確な説明ではありませんが、IMOは実用的な経験則です。それはいつも私のために働いてきました。 –

答えて

3

最初にオフで、!がブール型否定演算です。 (!head)は、基本的にhead == 0またはhead == falseです。 seond部分について :

ゼロが偽であり、NULLは(ほとんど)常にゼロであるので、while(h->next)それは式を否定する意味基本的に等価while(h->next != NULL)

+0

'NULL' *は常に私が知っている限り' 0'です。 –

+0

NULLマクロは実際には常に0です.0だけの実装で定義できます。 – Module