2011-01-27 17 views
0
私が作った

次の宣言:C++のポインタ - 紛争宣言とへのポインタのポインタ

enter image description here

注:コンパイル時に

int b; 
int c; 
int *b; 
int *c; 

は、私は次の出力を得た私は」 Cygwinコンソールを使用しているので、出力をコピー&ペーストできないのです。

ここで、w私たちはpointer変数を宣言すると、それはと同時に独自のデータを保持することができる普通のvaribaleですか?言い換えれば、アドレスと値を持つメモリ位置?

私はpointer-to-pointerを試してみたいので、これを聞いていますか?

私が持っている場合は `int型** C」は、例えば、私が作ることができる方法には、以下の保持:の(B)/アドレスの

値を(B)/(a)の/アドレスの値(a)

また、int ***cはありますか?

ありがとうございます。

+0

Windowsコンソールからコピーすることができます。 –

答えて

1
int b; 
int *b; 

これは明らかに、表示されるエラーを説明しています。

と同じ変数を2つ宣言するにはどうすればいいですか?という名前はありますか?同じ名前の2つの変数が競合を引き起こします。同様に、このため

同じ説明:同じ名前の

int c; 
int *c; 

2つの変数、ひいては紛争!

2

同じスコープ内で同じ名前の2つの変数を宣言しています。これは許可されていません。

1

ポインタは、メモリアドレスを格納する変数です。だから、それは値とメモリアドレスを持っています。

int *p = 0; int **pp = &p。これは有効です。pは、スタックに格納され、0の値とあるメモリアドレスを持つポインタです。 ppもスタックに割り当てられ、別のメモリアドレスがあり、メモリアドレスはpです。

メモリアドレスは、どこかに格納する必要があり、一定量のストレージを必要とします。たとえば、実装に応じてメモリアドレスを4バイトに格納することができます。このケースでは、) = 4をポインタへのポインタを含む、1 =

  • sizeof(char *) = 4
  • sizeof(

    • sizeof(char)他のポインタ型を有しています。

    したがって、reinterpret_castを実行すると、ポインタには最大4バイトを要する任意のタイプを格納できます。しかし、なぜあなたはそうしたいのですか?

  • 1

    はい、ポインタは値を持ち、メモリを占有する通常の変数です。あなたが得るエラーの理由はこれとは関係ありませんが、同じ名前の2つの異なるものを宣言しようとしているからです。

    もちろん、ポインタへのポインタ、ポインタへのポインタ、またはこの狂気のさらに多くのレベルを持つこともできます。唯一の問題は、それらをどのように使用するかということです。私はポインタへのポインタのための多くの使用を想像することができます。より多くのレベルでは、私は "配列の配列"を使用することしか想像できませんが、それはまだ何かです。

    しかし、間違った型の値を変数に格納しないでください。あなたは、ポインタへのポインタを持っている場合は、例えば何も、そこに(正しい型の)いくつかのポインタのアドレスを格納してはならない:

    int a; 
    int *b = &a; 
    int **c = &b; 
    

    この例では、の値を格納するために絶対に間違っているだろうa in c。ただし、intとポインタのサイズが同じプラットフォームでは可能です。しかし、それはテキスト文字列を絶対無意味で危険な場所に格納するようなものです。

    1

    いくつかの基本を教えてください。

    int b; 
    

    Bは、3のような積分値を保持するint型の変数、-28、49382

    int *b; 
    

    bはポインタを保持型int *の変数です。これはNULLでもかまいませんし、intを含む変数を指すこともできます。それはconst int *ではないので、あなたはそれに書き込むことも、そこから読み取ることもできます。 const(またはvolatile)修飾子がない限り、別のint変数を指し示すように動かすことができます。また、ポインタを使用して、動的に割り当てられたメモリやその配列の開始点(例えば、int *b = new int;またはint *b = new int[N])または静的配列の場所をポイントすることもできます。

    したがって、bは整数変数またはポインタ変数のいずれかです。それは両方になることはできません。私たちはときに我々のことをここで結論ん、

    はイエス、あなたがポインタへのポインタを持つことができ、あなたの最後のポイントに答えるために、それは明らかにそう int *******p

    +0

    したがって、もし私が 'int *'型の変数を持っていれば、その変数が保持する値は 'メモリアドレス'ですか?この場合、 'int **'型の変数は何を保持しますか?おかげで – Simplicity

    +0

    また、メモリアドレス。そのアドレスにポインタ(つまり、別のメモリアドレス)があり、これが整数を指しています。 –

    1

    持って読めなくなってしまうが、深さの制限はありませんポインタ変数を宣言すると、同時にそれ自身のデータを保持することができる普通のvaribaleですか?言い換えれば、アドレスと値を持つメモリ位置?

    はい、正確です。ポインタは、アドレスを保持する変数です。あなたのコードでは、(同じ名前空間内の)同じ名前の2つの変数を宣言しています。それは許されない。

    関連する問題