从main中的双指针函数打印出一个指针数组

时间:2017-10-13 22:22:01

标签: c++ arrays pointers double

这是来自我的.hpp文件。

struct Item{
    std::string todo;};
const int MAX_STACK_SIZE = 5;
class StackArray
{
    public:
        StackArray();
        bool isEmpty();
        bool isFull();
        void push(std::string Item);
        void pop();
        Item* peek();
        int getStackTop() { return stackTop; }
        Item** getStack() { return stack; }
    private:
        int stackTop;
        Item* stack[MAX_STACK_SIZE];
};
#endif

以下是我的.cpp文件中的部分功能。

void StackArray::push(std::string Item)
{
    if (isFull())
    {
        cout<<"Stack full, cannot add new todo item."<<endl;
    }
    else
    {
        stackTop++;
        Item* newStack = new Item[MAX_STACK_SIZE];
        newStack[stackTop].todo = Item;
    }
}

我真的很困惑在main.cpp文件中打印出堆栈数组。我怎样才能做到这一点?现在我得到了,但只能打印出地址。

int main()
{
    StackArray stackArray;
    if (stackArray.isEmpty())
        cout<< "Empty stack." <<endl;
    stackArray.push("25");
    stackArray.push("20");
    stackArray.push("15");
    stackArray.push("10");

    Item**stack1=new Item*[5];
    *stack1=new Item;
    stack1=stackArray.getStack();
    for(int i=0;i<5;i++)
    {
        cout<<*(stack1+i)<<endl;
    }
}

1 个答案:

答案 0 :(得分:1)

您的push方法实际上从未向stack添加任何内容。它分配了一个全新的指针数组,但它只被分配给一个局部变量,当函数结束时它会消失。它应该将项目添加到stack

void TodoStackArray::push(std::string Item)
{
    if (isFull())
    {
        cout<<"Stack full, cannot add new todo item."<<endl;
    }
    else
    {
        stackTop++;
        stack[stackTop] = new Item;
        stack[stackTop]->todo = Item;
    }
}

要打印出项目,您需要间接通过指针。

for (int i = 0; i < 5; i++) {
    cout << stack1[i]->todo << '\n';
}