有人可以解释一下下面的语法吗?

void initList_v(Room *(& roomsList_p)[3])
{
  roomsList_p[3] = new Room[3];
}

*(&)在函数签名中的意义是什么?这不是函数指针。有人可以帮助我了解这一点吗?

最佳答案

要解释变量的类型,请从内到外解开它:


  • roomsList_p:roomsList_p
  • &:对
  • 的引用
  • [3]:三个
  • 的数组
  • *:指向
  • 的指针
  • Room:Room实例。

  • 为什么当数组仍然衰减到指针时有人为什么要引用数组,并且可以这样声明函数:
    void initList_v(Room *roomsList_p[3])
    这是出于类型安全的考虑:正是因为数组会衰减为指针,所以忽略了数组参数声明的大小。但是,当将参数声明为引用时,调用者将被强制传递声明大小的数组。

    旁注:由于方括号[]的绑定(bind)比指针*和引用&的绑定(bind)要牢固,因此必须使用括号来消除引用的歧义:
    Room *& roomsList_p[3]
    将会是非法的,因为必须将其解释为对某事物的引用数组,但必须是arrays of references are not allowed

    关于c++ - 如何解释-输入*(&变量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57504784/

    10-13 08:18