Возможный дубликат:
Адрес переменной регистра
register int yy = 6;
int * myptr = &yy;
cout<<myptr<<" "<<&yy<<" "<<*myptr<<" "<<yy<<endl;
Deitel и Deitel, третье издание C ++, как программировать: на последней странице стр. 307 написано — оператор адреса не может применяться к переменным, объявленным с помощью регистра класса хранения. Как вышеприведенный код печатает:
0x28ff24 0x28ff24 6 6
Я что-то упускаю из-за указателя на переменные с классом хранения регистров?
Компилятор игнорирует ваш register
запрос, потому что ваш код принимает адрес yy
,
Ваша книга устарела.
В современном C ++ использование register
Ключевое слово устарело и не влияет на объявление (кроме того, что оно может служить подсказкой компилятору, что переменная может быть интенсивно использована). Это не мешает вам взять адрес переменной.
С действительно имеет это ограничение; и, вероятно, более старая версия C ++ также сделала, но у меня нет исторических документов, чтобы подтвердить это.
Дубликат Адрес переменной регистра
Отдельно, вот документация IBM по этому вопросу для одного из их компиляторов: