2010-12-06 4 views
4

Ich möchte hier nur überprüfen, wie Sie einen Verweis auf eine Funktion übergeben, die einen Zeiger will. Ich habe unten ein Codebeispiel. In meinem Fall übergebe ich eine C++ - Referenz an eine C-Funktion, die meinen Wert ändert.Wie übergebe ich eine C++ - Referenz an ein Zeigerargument einer C-Funktion?

Sollte ich die '&' Adresse des Betreibers in diesem Aufruf verwenden: retCode = MyCFunc (& myVar)? Es scheint, dass ich eine Referenz einer Referenz nehme, die in C++ nicht erlaubt ist. Es kompiliert jedoch gut und scheint zu funktionieren.

MainFunc() 
{ 

    int retCode = 0; 
    unsigned long myVar = 0; 

    retCode = MyCPlusPlusFunc(myVar); 

    // use myVars new value for some checks 
    ... 
    ... 
} 

int MyCPlusPlusFunc(unsigned long& myVar) 
{ 
    int retCode = 0; 
    retCode=MyCFunc(&myVar); 
    return retCode; 
} 

int MyCFunc (unsigned long* myVar) 
{ 
    *myVar = 5; 
} 

ich meinen Code gedacht war oben war in Ordnung, bis ich dieses Beispiel auf der IBM Website sah (sie gehen nicht mit dem ‚&‘ Adreßoperator): http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.ceea400/ceea417020.htm

// C++ Usage 
extern "C" { 
    int cfunc(int *); 
} 

main() 
{ 
    int result, y=5; 
    int& x=y; 

    result=cfunc(x); /* by reference */ 
    if (y==6) 
    printf("It worked!\n"); 


// C Subroutine 
cfunc(int *newval) 
{ 
    // receive into pointer 
    ++(*newval); 
    return *newval; 
} 

Im allgemeinen, ich kenne Sie folgendes tun:

int x = 0; 
int &r = x; 
int *p2 = &r; //assign pointer to a reference 

Was ist richtig? Sollte ich die & Adresse des Betreibers in meinem Anruf verwenden oder nicht?

+0

Bitte korrigieren Sie Ihren Code mit der entsprechenden Schaltfläche im Bearbeitungsformular. – Muggen

+0

@Muggen - Das habe ich schon gemacht –

+0

Danke ... sieht jetzt viel besser aus! – Lair78

Antwort

3

Ihre Verwendung ist korrekt, um &myVar zu tun, um die Adresse davon zu erhalten und an eine Funktion zu übergeben, die einen Zeiger haben möchte. Die Adresse einer "Referenz" zu nehmen, ist die gleiche wie die Adresse des Referenten.

+0

Grund für den Downvote? – birryree

+0

Danke. Ich wollte einfach nur eine Plausibilitätsprüfung durchführen, nachdem ich das Codebeispiel in diesem IBM Link gesehen habe. – Lair78

0

Eigentlich ist diese:

int x = 0; 
int &r = x; 
int *p2 = &r; 

setzt in p2 die Adresse x, so ist es das, was Sie brauchen.

1

Der Code, auf den Sie gestoßen sind, ist falsch. Es gibt keine Möglichkeit, einen Verweis auf eine Funktion zu übergeben, für die ein Zeiger erforderlich ist. Zumindest nicht für int.

+0

Ja, du hast Recht. Ich wollte nur sicher gehen, dass ich nicht verrückt werde. Vielen Dank! – Lair78

0

Verwenden Sie den Operator &. Ohne es versuchen Sie eine ungültige Konvertierung von int zu int*.

Verwandte Themen