Можливі дублікати:
яка різниця між const int *, const int * const, int const *
Я читав код FLTK, коли наткнувся на цей рядок коду:
Fl_Widget*const* a = array();
ось фактичний код:
Fl_Widget*const* Fl_Group::array() const {
return children_ <= 1 ? (Fl_Widget**)(&array_) : array_;
}
int Fl_Group::find(const Fl_Widget* o) const {
Fl_Widget*const* a = array();
int i; for (i=0; i < children_; i++) if (*a++ == o) break;
return i;
}
Зараз мені цікаво, що це за тип змінної покажчика a
. Є Fl_Widget*const* a = array();
і Fl_Widget** const a = array();
рівний?
Відповіді:
3 для відповіді № 1Ви читаєте це справа наліво:
Fl_Widget * const * a
"pointer to" <- "constant" <- "pointer to" <- "a is"
Що підсумовує до "a
є вказівником на постійний вказівник на Fl_Widget
".
Декларації в VAR a: POINTER TO CONST POINTER TO Fl_Widget
style був би дещо зрозумілішим, але C ++ перетягує синтаксис оголошення змінних із C, і C все стосувалося виразів, а не типів даних. Чорт його не мав навіть const
слово, тож вам не довелося про це думати, і int *a, b
було очевидно розшифровано як "*a
є int
, і b
є int
".