使用指针分配数组值
Posted
技术标签:
【中文标题】使用指针分配数组值【英文标题】:Assigning Array Values w/ Pointer 【发布时间】:2018-12-18 21:23:13 【问题描述】:我正在使用 C++ 练习基本的 OOP,在使用指针时我发现我不需要取消引用指针来分配值。为什么是这样? 菜单.h:
class Menu public:
int MenuCount;
int NumItems;
Drinks *Items;
菜单.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 的引用,但这段代码仍然有效。
【问题讨论】:
【参考方案1】:[] 运算符隐式取消引用指针。它用数组隐藏了指针算法,并且由于数组衰减为指向第一个元素的指针,因此它在指针上的效果与数组一样好。
【讨论】:
感谢您的澄清【参考方案2】:在您的情况下,Items[0]
实际上与 *(Items + 0)
相同,因此它已经为您进行了取消引用。
【讨论】:
谢谢,这也很有帮助【参考方案3】: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) 相同,它会在该点增加指针取消引用它。
【讨论】:
以上是关于使用指针分配数组值的主要内容,如果未能解决你的问题,请参考以下文章