Col*_*e W 0 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);
Run Code Online (Sandbox Code Playgroud)
每当我调用GetCCOrderLine时,我都会进入函数内部,并为指针cycleOrder和cycleLine分配有效值.当我走出函数GetCCOrderLine之外时,引用再次为NULL.下面的代码是如何定义GetCCOrderLine:
头文件
int GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中访问的两个数组以及用于为传入的指针赋值的数组声明如下.这些数组也填充了使用new运算符创建的对象:
CArray<CycleCountOrder*, CycleCountOrder*> m_Orders;
CArray<CycleCountLineItem*, CycleCountLineItem*> m_LineItems;
Run Code Online (Sandbox Code Playgroud)
如果要修改原始指针,则函数应该接收指针指针.
否则,您只需获取指针值的副本,然后修改此副本.
// 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();
}
Run Code Online (Sandbox Code Playgroud)