使用指针分配数组值

时间:2018-12-18 21:23:14

标签: c++ arrays pointers

我正在练习使用C ++编写的基本OOP,并且在使用指针时发现不需要取消引用指针来分配值。为什么是这样? Menu.h:

class Menu { public:
int MenuCount;
int NumItems;
Drinks *Items;

Menu.cpp

Menu::Menu(Drinks a, Drinks b, Drinks c)  {
std::cout << "How many items would you like on this menu? "; std::cin >> NumItems;
Items = new Drinks[NumItems];
Items[0] = a; Items[1] = b; Items[2] = c; // why is it I can assign values by pointer without dereferencing? 
MenuCount = 3;

据我了解,在将新对象分配给数组之前,我必须先用*取消对Items的引用,但是此代码仍然有效。

3 个答案:

答案 0 :(得分:1)

在您的情况下,Items[0]实际上与*(Items + 0)相同,因此它已经为您进行了取消引用。

答案 1 :(得分:1)

[]运算符隐式取消引用指针。它用数组隐藏了指针算法,并且由于数组会衰减到指向第一个元素的指针,因此它在指针和数组上的作用一样好。

答案 2 :(得分:0)

Menu::Menu(Drinks a, Drinks b, Drinks c)  {
    std::cout << "How many items would you like on this menu? "; std::cin >> NumItems;
    1#  Items = new Drinks[NumItems];
    2#  Items[0] = a; Items[1] = b; Items[2] = c; // why is it I can assign values by pointer without dereferencing? 
    MenuCount = 3;
}
  1. 我们正在分配一个指向指针的指针,new Drinks []将在堆上创建一个数组并返回指向它的指针。

  2. Items [0]与(* Items + 0)相同,它将在该点处增加对指针的取消引用。