それとも、アドレス a は b が参照する整数に等しいでしょうか?
それとも何か他のことが起こりますか?
編集: また、double *a = 3.0 の場合、a は 3.0 を指しますか?
コードが整数へのポインタである場合 ( の型と一致する必要がありますint *a = *b;
) 。つまり、それは整数へのポインターへのポインターです。指しているアドレスではなく、指しているアドレスが含まれます。*b
a
b
a
*b
b
ただし、コードがそうである場合、int *a; *a = *b;
それは異なります。その場合、指しているオブジェクトをb
指しているアドレスにコピーしていますa
。オブジェクトは整数である必要があるためa
、整数のコピーを指します (したがって、変更することはできますが、変更することは*b
あり*a
ません)。ちなみに、初期化されていない場合a
、それは未定義の動作になります(クラッシュする可能性が非常に高いです)。
に関する情報を提供していないため、質問の最初の部分は意味がありませんb
。
2 番目の部分 (についてdouble *a = 3.0
) については... C 言語と C++ 言語の両方で、非ポインター値によるポインターの初期化が禁止されています (NULL ポインター定数を除く)。double *a = 3.0
これは、有効な C または C++ コードではないことを直ちに意味します。単にコンパイルされません。int *a = 5
別の例では、同じことがコードにも当てはまります。
C と C++ の両方で、非ポインター値をポインター型に変換するには、明示的なキャストが必要です。このようなキャストの結果は実装定義です。
ポインタは任意の変数の参照であり、その中に他の変数の場所を格納します...あなたの例は次のようになります:
ダブル a=3.0; int b*=a;
したがって、ポインター (B) は変数 (A) を 3.0 の値で参照します。
*a = *b
つまり、アドレス付きメモリの内容をアドレス付きメモリにコピーb
しますa
if (*a==*b) つまり、アドレス付きメモリの内容がアドレス付きa
メモリの内容と等しいかどうかをチェックしますb
int *a = *b の場合、a は b が参照するオブジェクトを指しますか?
それは何であるかに依存しb
ます。
編集: また、double *a = 3.0 の場合、a は 3.0 を指しますか?
いいえ、それは無効なステートメントです。アドレスで初期化a
します。
それはあなたに警告を与える必要があります...キャストなしに変換int
しますint *
p
次のことを試してください。
#include <stdio.h>
int main(void)
{
int val = 5;
int *b = &val;
int *a = *b;
printf("&val = %p; b = %p, a = %p\n", &val, b, a);
return 0;
}
出力:
&val = 0xbfb652d4; b = 0xbfb652d4, a = 0x5
(アドレス値は変更される場合があります)
a
実際には、指す値を持つポインターになりますb
。b
それ自体がポインターへのポインターでない限り、a
おそらく無効な場所を指します。