-1

それとも、アドレス a は b が参照する整数に等しいでしょうか?

それとも何か他のことが起こりますか?

編集: また、double *a = 3.0 の場合、a は 3.0 を指しますか?

4

7 に答える 7

4

コードが整数へのポインタである場合 ( の型と一致する必要がありますint *a = *b;) 。つまり、それは整数へのポインターへのポインターです。指しているアドレスではなく、指しているアドレスが含まれます。*baba*bb

ただし、コードがそうである場合、int *a; *a = *b;それは異なります。その場合、指しているオブジェクトをb指しているアドレスにコピーしていますa。オブジェクトは整数である必要があるためa、整数のコピーを指します (したがって、変更することはできますが、変更することは*bあり*aません)。ちなみに、初期化されていない場合a、それは未定義の動作になります(クラッシュする可能性が非常に高いです)。

于 2012-11-04T17:17:08.860 に答える
1

に関する情報を提供していないため、質問の最初の部分は意味がありませんb

2 番目の部分 (についてdouble *a = 3.0) については... C 言語と C++ 言語の両方で、非ポインター値によるポインターの初期化が禁止されています (NULL ポインター定数を除く)。double *a = 3.0これは、有効な C または C++ コードではないことを直ちに意味します。単にコンパイルされません。int *a = 5別の例では、同じことがコードにも当てはまります。

C と C++ の両方で、非ポインター値をポインター型に変換するには、明示的なキャストが必要です。このようなキャストの結果は実装定義です。

于 2012-11-04T17:17:15.327 に答える
0

ポインタは任意の変数の参照であり、その中に他の変数の場所を格納します...あなたの例は次のようになります:

ダブル a=3.0; int b*=a;

したがって、ポインター (B) は変数 (A) を 3.0 の値で参照します。

于 2012-11-04T17:42:38.403 に答える
0

*a = *bつまり、アドレス付きメモリの内容をアドレス付きメモリにコピーbしますa

if (*a==*b) つまり、アドレス付きメモリの内容がアドレス付きaメモリの内容と等しいかどうかをチェックしますb

于 2012-11-04T17:12:50.347 に答える
0

int *a = *b の場合、a は b が参照するオブジェクトを指しますか?

それは何であるかに依存しbます。

編集: また、double *a = 3.0 の場合、a は 3.0 を指しますか?

いいえ、それは無効なステートメントです。アドレスで初期化aします。

于 2012-11-04T17:13:01.687 に答える
0

それはあなたに警告を与える必要があります...キャストなしに変換intしますint *p

于 2012-11-04T17:13:44.487 に答える
0

次のことを試してください。

#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実際には、指す値を持つポインターになりますbbそれ自体がポインターへのポインターでない限り、aおそらく無効な場所を指します。

于 2012-11-04T17:17:06.660 に答える