PA является переменной указателя , которая указывает на адрес памяти .В вашем случае вы сделали так, чтобы PA указывал на область памяти A, используя: PA = & A.Когда вы используете оператор -> на PA, он перейдет в ячейку памяти, которую вы указали ранее (& A) , и СЧИТАЕТ данные с этого адреса .Вот и все.
Пример: 3D-класс с именем A по адресу 0x1000.(например: случайная ячейка памяти)
3D A; // Creating a 3D structure variable
// This is your 3D structure in memory now.
A: 0x1000: x (x = offset 0)
0x1004: y (y = offset 4)
0x1008: z (z = offset 8)
// Create pointer to A variable
3D* PA = &A; // PA == 0x1000
// Shows the pointers are the same
std::cout << &A << std::endl; // Prints 0x1000 (THE ADDRESS of A!!)
std::cout << PA << std::endl; // Prints 0x1000 (THE ADDRESS of A!!)
// Remember, when using just PA->foo ... will READ the value by default
std::cout << PA->x << std::endl; // goto Address 0x1000, offset 0 (read x)
std::cout << PA->y << std::endl; // goto Address 0x1000, offset 4 (read y)
std::cout << PA->z << std::endl; // goto Address 0x1000, offset 8 (read z)
// If you want the get GET the address of x, y or z, do use & as normal.
// &PA->x mean goto address PA, offset x, y or z, and then get the address
std::cout << &PA->x << std::endl; // Prints 0x1000
std::cout << &PA->y << std::endl; // Prints 0x1004
std::cout << &PA->z << std::endl; // Prints 0x1008
Просто попробуйте поэкспериментировать с указателями и памятью, и вы должны прийти к тем же выводам.