Разыменование указателей на объекты...169
По аналогии с указателями на простые переменные можно решить, что в приведённом ниже примере происходит обращение к усреднённой оценке студента s.
_________________
169 стр. Глава 14. Указатели на объекты
int main( int argc , char* pArgs[ ] )
{
/* Этот пример некорректен */
Student s ;
Student* pS= &s ; /* Создаём указатель на объект s */
/* Обращаемся к члену gpa объекта, на который указывает pS ( этот фрагмент неверен ) */
*pS.gpa = 3.5 ;
return 0 ;
}
Как верно сказано в комментарии, этот код работать не будет. Проблема в том, что оператор "." будет выполнен раньше оператора "*".
Для изменения порядка выполнения операторов в С++ используют скобки. Так, в приведённом ниже примере компилятор сначала выполнит сложение, а затем умножение.
int i = 2 * ( 1 + 3 ) ; /* сложение выполняется до умножения */
В применении к указателям скобки выполняют те же функции.
int main( int argc , char* pArgs[ ] )
{
Student s ;
Student* pS = &s ; /* Создаём указатель на объект s */
/* Обращаемся к члену gpa того объекта, на который указывает pS ( теперь всё работает правильно ) */
( *pS ).gpa = 3.5 ;
return 0 ;
}
Теперь *pS вычисляет объект, на который указывает pS, а следовательно, .gpa обращается к члену этого объекта.
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ