crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> struct, и ее адрес.
Гость_TheGuest_*
сообщение 9.7.2015, 21:49
Сообщение #1





Гости








    


Доброго времени суток. У меня вопрос.
К примеру есть структура.

struct f
{
    int x;
    int y;    
};

int main ()
{
    f a;
    f b;
    
    cout<<&a<<endl<<&b<<endl;

    cout<<&a.x<<endl<<&a.y<<endl<<endl<<endl<<&b.x<<endl<<&b.y<<endl;

    system("pause");
    return 0;
}


А теперь вопрос. Почему у структуры a и у a.x один и тот же адрес??? Ситуация с b и b.x такая же, почему так ?? Это как в одномерных массивах получается ?
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 15.7.2015, 11:08
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
Проверил в Qt Creator в отладке, адрес один и тот же. :)


Вот этот показывает разные адреса:
Раскрывающийся текст
struct B1 {
    virtual ~B1() {}
};

struct B2 {
    virtual ~B2() {}
};

struct A : public B1, public B2 {
    virtual ~A() {}
};

A * aa  = new A;
B1 * b1 = aa;
B2 * b2 = aa;

qDebug() << b1 << b2;


Цитата
И при присваивании aa к b1 или b2, в зависимости от типа присваивается vptr.

Вообще это связанно не столько с vptr сколько с наследованием.
Внутри объекта A содержится и B1 и B2.
Естественно, что они не могут оба начинатся по адресу aa+0.
Когда мы преобразуем указатель к B1( или B2) то мы получаем адрес объекта внутри A.
Он может быть как со смещением относительно aa так и без.
Но в любом случае эти адреса будут разными(при такой реализации наследования).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- TheGuest   struct, и ее адрес.   9.7.2015, 21:49
- - Гость   Цитата(Гость_TheGuest_* @ 9.7.2015, 21:49...   9.7.2015, 22:15
|- - TheGuest   Цитата(Гость @ 9.7.2015, 22:15) Цитата(Го...   9.7.2015, 22:28
|- - ahalaj   Цитата(TheGuest @ 9.7.2015, 22:28) Но адр...   10.7.2015, 0:39
|- - TheGuest   Цитата(ahalaj @ 10.7.2015, 0:39) Цитата(T...   10.7.2015, 1:07
|- - Iron Bug   Цитата(TheGuest @ 10.7.2015, 3:07) Правда...   10.7.2015, 9:21
|- - Влад   Цитата(Iron Bug @ 10.7.2015, 9:21) потому...   10.7.2015, 11:08
|- - Iron Bug   Цитата(Влад @ 10.7.2015, 13:08) Более точ...   10.7.2015, 12:30
- - Влад   Хмм. Имей в виду, что это поведение некоторых конк...   10.7.2015, 13:24
|- - Iron Bug   Цитата(Влад @ 10.7.2015, 15:24) Хмм. Имей...   10.7.2015, 22:00
- - TheGuest   Теперь понятно все, спасибо вам всем за разъяснени...   10.7.2015, 13:48
- - lanz   Не ругайтесь Только два соображения еще: 1. В са...   12.7.2015, 23:37
- - ViGOur   Может ты имел ввиду: b1 == b2 == aa, но вот...   14.7.2015, 17:40
- - lanz   ЦитатаМожет ты имел ввиду: b1 == b2 == aa, но во...   14.7.2015, 18:28
- - ViGOur   Хм, может я чего не понимаю, но адрес будет один и...   15.7.2015, 9:34
- - Iron Bug   да, но (*A)b1 == (*A)b2 == aa. потому что в случае...   15.7.2015, 9:37
- - lanz   ЦитатаПроверил в Qt Creator в отладке, адрес один ...   15.7.2015, 11:08


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2024, 21:09