So möchte ich einen Zeiger auf eine Funktion übergeben und diese Funktion haben, ändern Sie den Zeiger aus dieser Funktion. Wie mache ich das im Allgemeinen? Hier drin?So ändern Sie einen Zeiger durch einen Parameter
EDIT:
Seit der treeNode ist eine Struktur von Zeigern I nodePtr->vendorDataRef
innerhalb der removeLeftMostNode(...)
Funktion zu übernehmen wollen, und es irgendwie an die aufrufende Funktion zurück. Ich dachte, ich dies durch einen Parameter removeLeftMostNode(...)
tun könnte daher removeLeftMostNode(...aVendor* vendorDataRef)
dh
aBst::treeNode * aBst::removeNode(aBst::treeNode * nodePtr)
{
aVendor * tempVendorPtr; //<----...to be assigned to this
treeNode * nodeToConnectPtr, * tempPtr;
...
tempPtr = removeLeftMostNode(nodePtr->right, &tempVendorPtr);
...
}
aBst::treeNode * aBst::removeLeftMostNode(aBst::treeNode * nodePtr, aVendor* vendorDataRef)
{
if(nodePtr->left == NULL)
{
//Target acquired, modify the value of vendorData through parameter
vendorDataRef = nodePtr->vendorData; //<---I want this pointer...
return removeNode(nodePtr);
}
else
return removeLeftMostNode(nodePtr->left, vendorData);
}
Dies ist die treeNode struct
struct treeNode
{
aVendor * vendorData;
treeNode * left;
treeNode * right;
};
Wie Sie sich vorstellen können, das ist ein Teil des Codes Entfernen Sie einen Eintrag aus einem binären Suchbaum. Dies ist der Code, der es indirekt aufruft.
bool aBst::remove(char nameOfVendor[])
{
bool failControl = false;
removeValue(root, nameOfVendor, failControl);
return failControl;
}
aBst::treeNode * aBst::removeValue(aBst::treeNode * subTreePtr, char nameOfVendor[], bool& success)
{
//Note: the subTreePtr should be root in initial call
treeNode * tmpPtr;
char name[MAX_CHAR_LENGTH];
subTreePtr->vendorData->getName(name);
if(subTreePtr == NULL) //Empty Tree
{
success = false;
return NULL;
}
else if(strcmp(name, nameOfVendor) == 0) //Evaluates to true if there is a match
{
//Item is in root of subTreePtr
subTreePtr = removeNode(subTreePtr);
success = true;
return subTreePtr;
}
else if(strcmp(name, nameOfVendor) < 0) // Go left
{
tmpPtr = removeValue(subTreePtr->left, nameOfVendor, success);
subTreePtr->left = tmpPtr;
return subTreePtr;
}
else // Go Right
{
tmpPtr = removeValue(subTreePtr->right, nameOfVendor, success);
subTreePtr->right = tmpPtr;
return subTreePtr;
}
}
"Ich möchte die Weitergabe nach Wert vermeiden" Fast jeder Parameter (außer "Erfolg") wird als Wert übergeben. "Wenn ich einen Zeiger auf einen Zeiger verwende, befürchte ich, dass der Wert von' tempVendorPtr' in 'removeNode' nicht verändert wird." Warum haben Sie Angst, * wird * den Zeiger verändern. Könntest Du das erläutern? – Rakete1111
Sorry aber was genau ist das Problem? Oder was und wo versuchst du zu erreichen, "_pass einen Zeiger auf eine Funktion und lassen Sie diese Funktion diesen Zeiger ändern" –
Erhalten Sie es als Referenz. Eher trivial. – EJP