それとも、アドレス a は b が参照する整数に等しいでしょうか?
それとも何か他のことが起こりますか?
編集: また、double *a = 3.0 の場合、a は 3.0 を指しますか?
コードが整数へのポインタである場合 ( の型と一致する必要がありますint *a = *b;) 。つまり、それは整数へのポインターへのポインターです。指しているアドレスではなく、指しているアドレスが含まれます。*baba*bb
ただし、コードがそうである場合、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おそらく無効な場所を指します。