Re[3]: Адрес указателя на первый элемент массива
От: Кодт Россия  
Дата: 05.05.08 10:41
Оценка: 1 (1)
Здравствуйте, 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>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.