使用指针分配数组值

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) 相同,它会在该点增加指针取消引用它。

【讨论】:

以上是关于使用指针分配数组值的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有数组值分配给数组指针?

如何使用 C++ 中的指针动态分配和解除分配二维数组?

分配指向结构数组的指针

将指针值分配给另一个指针值。我做错了吗?

当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?

怎么动态分配指针数组