2011-10-04 5 views
2
#include <iostream> 

int main() 
{ 
    int anything[] = {5}; 
    int *something = new int; 
    *something = 5; 

    std::cout << &anything << "==" << &anything[0] << "==" << anything << std::endl; 
    std::cout << &something << "!=" << &something[0] << "==" << something << std::endl; 
} 

なぜ&something[0]something異なる&somethingのメモリアドレス?動的割り当てではありますが、メモリアドレスが異なる理由はわかりません。私は複数の価値を持って試しました。それは同じことです。ここでは、単純化のために両方に1つの値を使用しました。メモリアドレス

答えて

4

&somethingは、ポインタ自体のメモリアドレスです(ちょっと、どこかの値を格納する必要があります)。&something[0]は、あなたのものを格納している実際のメモリのアドレスです。

+0

しかし、何かもポインタですか?例えば、もし私が&と何かを(とにかく)変えれば、それは等しくなり、最初のポインタ自体のメモリアドレスは&anything [0]と何かに等しくなります。動的割り当てでは、何か、なぜポインタ自体が異なるメモリアドレスを持っていますか? – Daniel

+2

いいえ。 'anything'は配列であり、ポインタではありません。多くの、ただしすべてではないコンテキストでは、 'array'への参照はポインタに相当します。違いがある文脈の1つは、(単項)の '&'のオペランドです。 –

2

somethingはポインタです。 &somethingはそのポインタのアドレスです。 &something[0]は、ポインタが指し示す最初の要素のアドレスであり、ポインタのアドレスとはまったく異なります。 somethingはポインターの値であり、指し示されている要素のアドレスでもあります。

私はこれまで何度もこのトピックがカバーされていると確信しています。

関連する問題