3

可能重复:
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();平等的吗?

4

1 回答 1

3

您从右到左阅读它:

Fl_Widget      *            const            *              a
          "pointer to" <- "constant" <- "pointer to"  <- "a is"

总结为“a是一个指向”的常量指针Fl_Widget

风格上的声明VAR a: POINTER TO CONST POINTER TO Fl_Widget会更清晰一些,但是 C++ 将他的变量声明语法从 C 中拖了出来,而 C 是关于表达式的,而不是数据类型。哎呀,它甚至没有const字,所以你不必考虑它,并且int *a, b显然被破译为“*aint,并且bint”。

于 2012-12-27T10:13:33.843 回答