#c
#c
Вопрос:
Привет, я наткнулся на эту строку кода, написанную на c:
uint64_t rsp = (uint64_t) amp; (base);
где base также является переменной типа uint64_t.
Каково влияние оператора AND между переменной и типом данных?
Комментарии:
1.
(uint64_t)
здесь используется оператор приведения к типу, а не операнд; иamp;
является оператором унарного адреса.(uint64_t) amp; (base)
анализируется как(uint64_t)(amp;base)
. Он принимает адресbase
и преобразует его вuint64_t
.2.
amp;
в данном контексте это не битовый оператор. Это оператор «адрес». Эта строка кода неверно отформатирована.3. Спасибо! Я понятия не имел, что amp; предназначалось для использования в качестве оператора адреса.
Ответ №1:
Я думаю, что способ форматирования этой строки добавляет путаницы. В коде C обычно не пишется пробел между унарным оператором ( amp;
) и его операндом ( base
). Также ( )
around base
не являются избыточными.
Это более понятно:
uint64_t rsp = (uint64_t)amp;base;
amp;base
принимает адрес base
и (uint64_t)
является приведением.