これらの二つの文の違いは? - C ++
-
19-09-2019 - |
質問
私はより良い私が学んだことの一つは、あなたがNULLへのポインタを設定することができるということです、ポインタを理解しようとしたプログラミング学生です。私の質問は、これらの二つの文の違いは何ですか?場合は、それらのそれぞれがfalse / trueを返すでしょうか?
if (some_ptr == NULL)
if (*some_ptr == NULL)
の のおかげで!のの
解決
まず、第二は、それに保持された値を取得し、ポインタを間接参照し、ヌルに対してそれを比較し、ヌルに変数のアドレスとの比較を行います。
他のヒント
最初の文は、ポインタsome_ptrが指す実際のアドレスを指します。ケースでは、NULL(NULLを定義で表される値)が、それは本当、そうでない場合はない。
後者のステートメントは、ポインタが指しているアドレスにコンテンツを指します。あなたは整数にsome_ptrポイントを抱えている、とその整数はあなたのnullは定義と同じであることを起こるのであれば、第2の条件はtrueに評価されます。
最初は、あなたが望ましいと思われるNULLポインタに対して自分自身を、比較しているです。
二つ目は、あなたの変数名に基づいて0にint型の値を比較しているように、あなたが最初に、そしてNULLと比較されている値を取得するには、ポインタを逆参照されていることである。
最初は言う:
<私> some_ptr のNULLはありますか?
二氏は述べています。
はどんなsome_ptrは、 NULLを指していますか?
などの場合:int型* X;あなたは、XポイントがNULLにいるかどうかをチェック好きならここで我々は最初の文を使用します。あなたは番目のステートメントを使用した場合と同じint型* Xでは、あなたはポインタを参照解除しようとしているとの点xは値をチェック。 NULLがC 0であるため、C ++のそれにポイントをxは値0をチェックする。
ログイン
EDIT:。また、第二の文と、NULLにX点は、次にUNIX上のコアドロップNULLポインタ結果をdeferencing場合