代码之家  ›  专栏  ›  技术社区  ›  Cole W

C++指针问题

  •  0
  • Cole W  · 技术社区  · 14 年前

    我有一个指针问题,我好像搞不清楚。好像我已经用了1000次这样的指针,所以我不太清楚这里发生了什么。我有以下代码:

    int iRetVal;
    CycleCountOrder* cycleOrder =  NULL;
    CycleCountLineItem* cycleLine = NULL;
    
    
    iRetVal = m_CycleCount.GetCCOrderLine(pOneLocation.szOrderNum[c], cycleOrder, cycleLine);
    

    头文件

    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;
    }
    

    CArray<CycleCountOrder*, CycleCountOrder*> m_Orders;
    CArray<CycleCountLineItem*, CycleCountLineItem*> m_LineItems;
    
    3 回复  |  直到 14 年前
        1
  •  5
  •   Dmitry Yudakov    14 年前

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

    // 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();
    }
    
        2
  •  4
  •   Chubsdad    14 年前

    如果希望指针的更改反映在调用者中,请通过引用传递指针。

    #include <iostream>
    using namespace std;
    
    void f(int *pnochange, int *&pchange){
       pnochange++;
       pchange++;
    }
    
    int main(){
       int buf[] = {1, 2};
    
       int *p1, *p2;
       p1 = p2 = buf;
    
       f(p1, p2);
    
       cout << *p1 << *p2;    // prints 12
    }
    
        3
  •  3
  •   Vinay    14 年前