An eine Funktion einen Pointer übergeben und diesen auf ein globales Array zeigen lassen



  • Hallo,

    ich habe ein kleines Problemchen. Prinzipiell geht es um so etwas wie unten dargestellt. Ich habe drei globale Arrays. In meiner Main-Routine möchte ich eine Funktion aufrufen, die einen int-Pointer übergeben kriegt. Diesen Pointer möchte ich in der Funktion auf eines der globalen Arrays richten.

    Nach der Funktion möchte ich dann gerne irgend etwas mit meinem neu zugewiesenen Pointer machen, z.B. durch das Array durchiterieren oder so, ist ja auch Wurscht.

    Nun ist es allerdings leider so, dass in meiner Funktion wohl nicht der "richtige" Pointer verwendet wird, sondern eine lokale Kopie. Denn nach dem Durchlauf der Funktion ist der Pointer immer noch 0, obwohl ich ihn ja eigentlich zugewiesen habe.

    Gibt es eine Möglichkeit, wie ich relativ einfach den "original" Pointer übergeben kann und dann dann auf eines der Arrays zeigen lasse? Oer mache ich irgend etwas anderes grundlegendes falsch?

    Danke schon mal im Voraus.

    #include <stdio.h>
    
    int globA[10];
    int globB[10];
    int globC[10];
    
    bool SetPointer(int* pMyPointerOnGlobalVariable);
    
    int main( void )
    {
    	int i = 0;
    	for (i = 0; i < 10; i++)
    	{
    		globA[i] = 0;
    		globB[i] = 0;
    		globC[i] = 0;
    	}
    
    	int* pOnIntegerArray = 0;
    
    	SetPointer(pOnIntegerArray);
    	//pointer is still null
    
    }
    
    bool SetPointer(int* pMyPointerOnGlobalVariable)
    {
    	pMyPointerOnGlobalVariable = globB;
    	return true;
    }
    


  • Der Zeiger wird bei der Übergabe an die Funktion kopiert, deshalb wird nicht das Original verändert.

    Wenn du in C++ programmierst, kannst du eine Referenz auf den Zeiger übergeben:

    bool SetPointer(int*& pMyPointerOnGlobalVariable);
    

    In C und in C++ kannst du auch einen Doppelzeiger (Zeiger auf Zeiger auf int ) übergeben:

    bool SetPointer(int** pMyPointerOnGlobalVariable);
    


  • Hi,

    danke für die rasche Antwort. Den zweiten Vorschlag hatte ich schon versucht, aber da kam leider das gleiche Ergebnis dabei heraus. Vermutlich habe ich da irgend was mit der Syntax falsch gemacht.

    Der erste Vorschlag mit der Referenz klappt super! Vielen Dank.



  • Nur eine Anmerkung: Funktionen lieben es Werte zurückzugeben, was gerade einzelne out-Parameter sinnlos macht:

    int* GetRightPointer()
    {
        return globB;
    }
    
    int main()
    {
        int* pOnIntegerArray = GetRightPointer();
    }
    

    Im Fehlerfall kannst du NULL zurückgeben oder eine Exception werfen.


Anmelden zum Antworten