C++指针问题

标签 c++ pointers pass-by-reference pass-by-value

我有一个我似乎无法弄清楚的指针问题。好像我已经以这种方式使用了 1000 次指针,所以我不太确定这里发生了什么。我有以下代码:

int iRetVal;
CycleCountOrder* cycleOrder =  NULL;
CycleCountLineItem* cycleLine = NULL;


iRetVal = m_CycleCount.GetCCOrderLine(pOneLocation.szOrderNum[c], cycleOrder, cycleLine);

每当我调用 GetCCOrderLine 时,我都会进入该函数,它会将有效值分配给指针 cycleOrder 和 cycleLine。当我走出函数 GetCCOrderLine 时,引用再次为 NULL。下面的代码是如何定义 GetCCOrderLine 的:

头文件

int GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine);

cpp文件

int CCycleCount::GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine)
{
    CString szCurrOrderLnitem;
    for(int c = 0; c < m_Orders.GetCount(); c++)
    {
        CycleCountOrder* currentOrder = m_Orders[c];

        for(int d = 0; d < currentOrder->m_LineItems.GetCount(); d++)
        {
            CycleCountLineItem* currentLine = currentOrder->m_LineItems[d];

            szCurrOrderLnitem.Format("%s-%d-%d", currentOrder->szOrderNum, currentLine->nLnitemNum, currentLine->nSubitemNum);

            if(szCurrOrderLnitem == szOrderLnitem)
            {
                cycleOrder = currentOrder;
                cycleCountLine = currentLine;
                return FUNC_OK;
            }
        }
    }

    return FUNC_ERROR;
}

此外,上述代码中访问的两个数组以及用于为传入的指针赋值的两个数组声明如下。这些数组还填充了使用 new 运算符创建的对象:

CArray<CycleCountOrder*, CycleCountOrder*> m_Orders;
CArray<CycleCountLineItem*, CycleCountLineItem*> m_LineItems;

最佳答案

如果您想修改原始指针,您的函数应该接收指向指针的指针。

否则,您只是获取指针值的拷贝并修改此拷贝。

// will modify the copy
void ptr( MyClass * ptr_copy )
{
    ptr_copy = new MyClass();
}

// will modify the original ptr
void ptr2ptr( MyClass ** ptr_2_ptr )
{
    *ptr_2_ptr = new MyClass();
}

关于C++指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761413/

相关文章:

C++ 参数在运行时发生变化

c++ - 内存是如何布局的,地址在哪个方向变大?使用 union

类型转换,C编程

c - 从双指针访问结构

c++ - OCaml 有引用传递的能力吗?

c++ - 类名函数名(const 类名&对象名) 是什么意思?

c++ - malloc.c "sYSMALLOC: Assertion"与 C++ 项目一起执行

c++ - 一道c++语法题: class for method

c++ - 重新分配时 vector 调用析构函数

.net - Powershell/.Net : Get a reference to an object returned by a method