Здравствуйте, Neavirc, Вы писали:
N>Я там опечатался немного, я ожидал такого поведения:
N>int i = 100;
N>int* p = &i;
N>cout << &i << endl;
N>cout << &p << endl;
Так ведь неявное приведение массива к указателю — (int*)a (где int a[]={....}) является rvalue и не имеет адреса.
Ну а то, что массив целиком расположен в памяти там же, где расположены его элементы, — ничего удивительного

Ситуация чем-то похожа на
struct Foo
{
int x;
operator int*() { return &x; }
};
Foo foo;
cout << &foo << endl; // указатель на структуру
cout << foo << endl; // эквивалентно (int*)foo
cout << &foo[0] << endl; // эквивалентно &*((int*)foo+0), & и * сокращаем, +0 тоже сокращаем...
cout << (&foo == &foo.x) << endl; // true
Но как только ты заводишь ещё одну переменную для хранения указателя — то эта переменная обретает собственный адрес.
Заведёшь две переменные — будут два разных адреса...
... << RSDN@Home 1.2.0 alpha rev. 655>>