0

理解できないポインタの問題が発生しています。このようにポインタを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;
}

また、上記のコードでアクセスされ、渡されたポインターに値を割り当てるために使用されている2つの配列は、次のように宣言されています。また、これらの配列は、new演算子で作成されたオブジェクトで埋められます。

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

3 に答える 3

5

元のポインターを変更する場合、関数はポインターへのポインターを受け取る必要があります。

それ以外の場合は、ポインタ値のコピーを取得し、このコピーを変更します。

// 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();
}
于 2010-09-21T14:42:00.397 に答える
4

ポインタへの変更を呼び出し元に反映させたい場合は、参照によってポインタを渡します。

#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
}
于 2010-09-21T14:47:07.217 に答える
3

参照渡し

于 2010-09-21T14:40:55.443 に答える