#include <iostream>
using namespace std;
class temp {
int a = 10;
};
class derived : temp {
int b = 20;
};
int main()
{
derived der;
void * p = &der;
cout<<"First element in der is : "<<*(int*)p<<endl;
cout<<"(int*)p :"<<(int*)p<<endl;
p += sizeof(int); //Way -1
//p = (int*)p + sizeof(int); //Way-2
cout<<"Second element in der is : "<<*(int*)p<<endl;
cout<<"(int*)p :"<<(int*)p<<endl;
return 0;
}
Если я выполню приведенный выше код, я получу следующий результат:
Первый элемент в der: 10
(int *) p: 0x7ffe9f05a928
Второй элемент в der: 20
(int *) p: 0x7ffe9f05a92 c
Где, как если бы я комментировал строку кода в (Way-1) и строку без комментариев для (Way-2), я получаю результат ниже :
Первый элемент в der: 10
(int *) p: 0x7ffc10e6de18
Второй элемент в der: 0
(int *) p: 0x7ffc10e6de28
Что не так во второй попытке? Почему здесь разные результаты арифметики указателя c?