Zeiger und Funktionen



  • Hallo!
    Ich bin gerade dabei, mich in Zeigern einzuüben.

    #include <iostream> 
    using namespace std;
    
    int rechne(int * a, int * b)
    {
    	int x = *a;
    	int y = *b;
    	int ergebnis = x+y;
    	return ergebnis;
    }
    
    void main()
    {
    	int a = 1;
    	int b = 1;
    	cout << rechne(&a,&b);
    }
    

    Muss man es eigentlich so umständlich machen? Man kann ja keine Zeiger addieren.

    Und noch etwas: Wann lohnt es sich, Zeiger zu verwenden?
    Angeblich ist es ja schneller, wenn man die Adresse einer Variablen übergibt, und die Funktion nicht selber neue Objekte bilden muss.

    Aber wie sieht es in der Anwendung aus? Wann sollte man Zeiger wirklich verwenden?



  • Muss man es eigentlich so umständlich machen? Man kann ja keine Zeiger addieren.

    geht auch direkter.

    #include <iostream> 
    using namespace std;
    
    int rechne(int * a, int * b)
    {
    	return *a + *b;
    }
    
    void main()
    {
    	int a = 1;
    	int b = 1;
    	cout << rechne(&a,&b);
    }
    

    oder gar mit referenzen

    #include <iostream> 
    using namespace std;
    
    int rechne(int & a, int & b)
    {
    	return a + b;
    }
    
    void main()
    {
    	int a = 1;
    	int b = 1;
    	cout << rechne(&a,&b);
    }
    

    referenzen haben const sehr gerne.

    #include <iostream> 
    using namespace std;
    
    int rechne(int const & a, int const & b)
    {
    	return a + b;
    }
    
    void main()
    {
    	int a = 1;
    	int b = 1;
    	cout << rechne(&a,&b);
    }
    

    Und noch etwas: Wann lohnt es sich, Zeiger zu verwenden?
    Angeblich ist es ja schneller, wenn man die Adresse einer Variablen übergibt, und die Funktion nicht selber neue Objekte bilden muss.

    wenn die objekte groß sind. so ein int ist schneller ohne zeiger übergeben. sizeof(int)==4 und sizeof(int*)==4 (bei mir). haste sizeof(Person)==240 und sizeof(Person*)==4, ist es viel schneller, ne Person als zeiger oder referenz zu übergenen. ich mag es am liebsten, rewferenzen zu nehmen, wenn sie auch const sein können und zeiger, wenn const nicht geht.



  • ceplusplus schrieb:

    Hallo!
    Ich bin gerade dabei, mich in Zeigern einzuüben.

    #include <iostream> 
    using namespace std;
    
    int rechne(int * a, int * b)
    {
    	int x = *a;
    	int y = *b;
    	int ergebnis = x+y;
    	return ergebnis;
    }
    
    void main()
    {
    	int a = 1;
    	int b = 1;
    	cout << rechne(&a,&b);
    }
    

    Muss man es eigentlich so umständlich machen?

    Nö. Für diese (sinnlose) Funktion sind Zeiger total ungeeignet. Wenn, dann würde man es so machen:

    int rechne(int a, int b) {
    return a+b;
    }
    

    Wann sollte man Zeiger wirklich verwenden?

    Immer dann, wenn man sie braucht. 🤡



  • #include <iostream> 
    using namespace std; 
    
    int rechne(int & a, int & b) 
    { 
        return a + b; 
    } 
    
    void main() 
    { 
        int a = 1; 
        int b = 1; 
        cout << rechne(&a,&b); 
    }
    

    ...ist aber gar nicht lieb:

    --------------------Konfiguration: Übung1 - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    D:\C++\VC6\Übungen\Übung1\main.cpp(13) : error C2664: 'rechne' : Konvertierung des Parameters 1 von 'int *' in 'const int &' nicht moeglich
            Ursache: Konvertierung von 'int *' in 'const int' nicht moeglich
            Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    Fehler beim Ausführen von cl.exe.
    
    Übung1.exe - 1 Fehler, 0 Warnung(en)
    


  • Du übergibst die Werte falsch. &a ist vom Typ int* - die Funktion erwartet aber einen int. Es muss also heißen:
    rechne(a,b);



  • Ok, es war dein Code .. 🙄

    EDIT: Oh es war Volkard's Code sorry...


Anmelden zum Antworten