Addition von Pointern zu Pointern



  • Hallo zusammen!
    Ich schreib grad an meinem Programm weiter und jetzt wollte ich zwei Zeiger addieren und das wiederrum in einem Zeiger ablegen!
    Geht das?
    HILFE 😕



  • du kannst den Inhalt der Adresse auf die die Zeiger zeigen addieren, ja.
    die Adressen natürlich nicht 😉



  • Kannst du das mal genauer erklären? Was hast du vor?

    Mal ganz von Anfang: Ein Zeiger stellt einer Speicheradresse dar. Den kannst du dereferenzieren, um an die Daten zu kommen, die dort im Speicher stehen, erhöhen/verringern und noch ein paar andere Spielereien - aber du kannst zwei Zeiger NICHT addieren (höchstens die Daten, auf die sie zeigen: *target = *src1 + *src2; ).



  • Ok kein Problem!
    Also ich muß folgende Formel einbringen

    effW=sqrt(1/nE*(mwert²+mwert²+...)

    Ich muß es irgendwie hinbekommen, das ich über nE eine bestimmte anzahl von mwert(en) quadriere und dann addiere!
    Das quadrieren habe ich schon hinbekommen:

    for(j=0; j<nE; j++)
    {
    
    		*(summeee+i)+=(*(summen+i));
    		for(i=0; i<(nW-nE); i++)
    		{
    			*(summen+i) = *(werte+i)*(*(werte+i));
    			*(summeee+i)+=(*(summen+i));
    
    		}//end for
    
    }//end for
    

    Das mit dem addieren klappt noch ned so gut 😡



  • musst du zeiger verwenden?
    wir wäre es mit int, double etc.?



  • Ich muß z.B. 20 Werte eingeben und dann für eine variable Anzahl z.B. von drei Werten die effW bestimmen!
    Ich wüßte nicht wie ich das sonst machen soll?



  • Bjoern821 schrieb:

    ...Ich wüßte nicht wie ich das sonst machen soll?

    Eigentlich haben C und C++ für sowas "Container" ... C nur Arrays und C++ zusätzlich noch vector&Co.

    Zwar ist die "Plus-Schreibweise"

    *(summen+i)
    

    äquivalent zu der "Indexschreibweise"

    summen[i]
    

    , letztere finde ich aber viel lesbarer (gerade, wenn man das häufig verwendet und dann noch mit dem "arithmetischen + und *" mischt).

    Da könnte man dann aus

    *(summeee+i)+=(*(summen+i));
    

    Folgendes machen:

    summeee[i] += summen[i];
    

    oder:

    *(summen+i) = *(werte+i)*(*(werte+i));
    

    =>

    summen[i] = werte[i]*werte[i];
    

    Finde ich deutlich übersichtlicher und deswegen "fehlerunanfälliger".
    Dazu bräuchtest Du wahrscheinlich nichtmal etwas Anderes an Deinem Programm zu ändern.

    Die nächste Frage wäre, wie Du Deine Variablen definierst. Als Arrays ( int summen[10]; ) ?
    Wenn Du's dynamischer brauchst, könnte std::vector was für Dich sein:

    #include <vector>
    
    std::vector<int> summen;
    
    // füllen mittels "push_back()"
    summen.push_back(12);
    summen.push_back(34);
    summen.push_back(5678);
    ...
    
    // verwenden wie oben:
    summen[i] += 4;
    

    (spart Dir alles new/delete)

    Gruß,

    Simon2.


Anmelden zum Antworten