/ / Що означає “int * const * num”? [дублікат] - c ++, покажчики, const

Що означає "int * const * num"? [дублікат] - c ++, покажчики, константи

Можливі дублікати:
яка різниця між 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".