我正在练习使用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的引用,但是此代码仍然有效。
答案 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;
}
我们正在分配一个指向指针的指针,new Drinks []将在堆上创建一个数组并返回指向它的指针。
Items [0]与(* Items + 0)相同,它将在该点处增加对指针的取消引用。