Zeigerinhalte addieren



  • Hallo Liebe Programmierfreunde,

    ich habe ein Problem,
    ich möchte gerne den Inhalt zweier Zeiger folgendermaßen verarbeiten.

    (r+i)=((u+i))2+(*(v+i))2;

    (In den Arrays stehen Werte i die ich quadratsich addieren will!)

    habe wirklich schon seid ca 2Stunden versucht des irgendwie hinzubekommen, aber irgendwie läuft mir der Inhalt von allen drei Variablen davon.

    Bitte helft mir, ich komm einfgach nicht mehr weiter!

    MfG


  • Mod

    Ist dir auch klar, dass ^ in C kein Potenzoperator ist?

    edit: Ansonsten machst du das mit dem Zeigerzugriff im Prinzip richtig, mich wundert aber, warum du nicht den Arrayelementzugriffsoperator benutzt:

    int main(){
      int r[5];
      int u[5]={1,2,3,4,5};
      int v[5]={6,7,8,9,10};
    
      // Umständliche, schwer lesbare Variante:
      for (int i=0;i<5;++i) *(r+i)=*(u+i) * *(u+i) + *(v+i) * *(v+i);
      for (int i=0;i<5;++i) cout<< *(r+i)<<endl;
    
      // Übliche, übersichtliche Variante:
      for (int i=0;i<5;++i) r[i]=u[i] * u[i] + v[i] * v[i];
      for (int i=0;i<5;++i) cout<< r[i] <<endl;
    }
    


  • Ja, ich habe halt mit * multipliziert, des gin soweit ich weiß auch, aber das addieren ist das Problem!


  • Mod

    Ich habe bei mir gerade noch ein Beispiel reineditiert, guck dir das mal an.



  • Hi Seb,
    danke dür deine schnelle Antwort, aber des klappt einfach nicht. So habe ich das auch schon versucht aber da ändern sich die Werte in meinem dynamischen Array. Habe auch gelesen, dass das addieren von Zeigern nichts sinnvoles ergibt. Blick im Moment nicht mehr so ganz durch!

    #include <stdio.h>
    #include <malloc.h>
    
    double* mersene_twister(double pointer[],int len);
    
    int main(void)
    {
    	double *u;
    	double *v;
    	double *r;
    
    	int i;
    	int len=100;
    
    	u=(double*)malloc(len*sizeof(char));
    	if(u==NULL)
    	{
    		printf("Es konnte kein Speicher fuer u reserviert werden!");
    		return(0);
    	}
    
    	v=(double*)malloc(len*sizeof(char));
    	if(v==NULL)
    	{
    		printf("Es konnte kein Speicher fuer v reserviert werden!");
    		return(0);
    	}
    
    	r=(double*)malloc(len*sizeof(char));
    	if(r==NULL)
    	{
    		printf("Es konnte kein Speicher fuer r reserviert werden!");
    		return(0);
    	}
    
    	u=mersene_twister(u,len);
    	v=mersene_twister(v,len);
    
    	for (i=0;i<len;i++)
    	{
    
    		r[i]=(u[i] * u[i])+(v[i] * v[i]);
    		printf("\n%lf %lf %lf",u[i],v[i],r[i]);
    	}
    
    }
    

    also ich bekomm aus meiner Funktion Zufalsszahlen zwischen [-1..1] aber wenn ich des jetzt mache laufen die Werte einfach so weg!



  • da muss size of double stehen!



  • Hat sich erledigt mit dem Fehler, dass ich nur für char reserviert habe, hat mir das r den alten Speicher überschrieben und dann is alles gefloatet!

    Sorry!


  • Mod

    Noch ein Tipp: Du programmierst in C, nicht in C++. Diese Mal konnte man dir helfen, weil dein Problem beide Sprachen betrifft. Falls du mal speziellere Fragen hast, kann dir im hiesigen ANSI C Unterforum jedoch besser geholfen werden.

    Zum Beispiel hätte man hier deinen Fehler beim malloc nur schwer gefunden, aber den hast du ja zum Glück selber bemerkt. Ein erfahrener C Programmierer hätte das bestimmt auf den ersten Blick gesehen.


Log in to reply