www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Array/ Pointerschreibweise
Array/ Pointerschreibweise < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Array/ Pointerschreibweise: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:02 Do 15.11.2007
Autor: NetCowboy

Aufgabe
huhu,

ich hab da en problem und zwar folgende Aufgabenstellung :

es soll ein 4x4 Array zuerst mit nullen belegt werden und dann werden an irgendwelchen koordinaten innerhalb dieses feldes einsen eingefügt.

dann soll man 8 mal raten können wo in dem 4x4 array einsen stehen.

am ende wird ausgegeben wieviele einsen man erraten hat.

Alles kein Problem , hab das fix gelöst. Jedoch ist gefordert die pointerschreibweise zu benutzen ( gibt bonuspunkte) . ich habs mittels der array schreibweise realisiert.

als ich dann auf pointerschreibweise gewechselt bin , bekomme ich andauernd ne fehlermeldung vom debugger ,daß das was ich vorhabe nich geht ( invalid indirection)

hier ein ausschnitt des codes mit array schreibweise :

//---------------------------------------------------------------------------
#pragma hdrstop
#include <conio.h>
#include <windows.h>
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctype.h>
#include <time.h>

using namespace std;

void belegung( int zufallsmatrix[][4]);
void zufallseinsen(int zufallsmatrix[][4]);
void raten(int ratematrix[][2]);
int vergleichen(int zufallsmatrix[][4],int ratematrix[][2]);
int main()
{
int zufallsmatrix[4][4],ratematrix[8][2];

belegung(zufallsmatrix);
zufallseinsen(zufallsmatrix);
raten(ratematrix);
if (vergleichen(zufallsmatrix,ratematrix)>=4)
    cout<<"Sie haben 4 oder mehr Einsen korrekt erraten! Glückwunsch!";
    else cout<<"Sie haben leider nicht mehr als 4 Einsen erraten =(";
  getch();

}

void belegung(int zufallsmatrix[][4])
{
int z,s,i,j;
z=4;
s=4;
for(i=0; i<=z; i++)
for(j=0; j<=s; j++)
   {
    zufallsmatrix[i][j]=0;
    }
}

und jetzt in pointerschreibweise:

//---------------------------------------------------------------------------
#pragma hdrstop
#include <conio.h>
#include <windows.h>
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctype.h>
#include <time.h>

using namespace std;

void belegung( int *zufallsmatrix);
void zufallseinsen(int *zufallsmatrix);
void raten(int *ratematrix);
int vergleichen(int *zufallsmatrix,int *ratematrix);
int main()
{
int zufallsmatrix[4][4],ratematrix[8][2];

belegung(zufallsmatrix);
zufallseinsen(zufallsmatrix);
raten(ratematrix);
if (vergleichen(zufallsmatrix,ratematrix)>=4)
    cout<<"Sie haben 4 oder mehr Einsen korrekt erraten! Glückwunsch!";
    else cout<<"Sie haben leider nicht mehr als 4 Einsen erraten =(";
  getch();

}

void belegung(int *zufallsmatrix)
{
int z,s,i,j;
z=4;
s=4;
for(i=0; i<=z; i++)
for(j=0; j<=s; j++)
   {
    *(*(zufallsmatrix+i)+j)=0;
    }
}


wie ist in diesem fall die korrekte pointerschreibweise für 2 dimensionale felder ?

er meckert immer an der stelle *(*(zufallsmatrix+i)+j)=0;

und ich versteh nich warum =(

laut meinem schlauen buch ist alles korrekt (Informatik für Ingenieure)

ich raste noch aus

        
Bezug
Array/ Pointerschreibweise: Antwort
Status: (Antwort) fertig Status 
Datum: 17:17 Do 15.11.2007
Autor: Martin243

Hallo,

dann versuch es doch mal im Funktionsheader mit:
void belegung(int **zufallsmatrix)

Es müssen schon zwei Dimensionen sein.
Du kannst ja mal schauen, ob sich danach noch weitere Schwierigkeiten ergeben...


Gruß
Martin

Bezug
                
Bezug
Array/ Pointerschreibweise: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:47 Do 15.11.2007
Autor: NetCowboy

Dies müßte ich dann auch auf die Prototypen der Functions anwenden oder ?

Bezug
                        
Bezug
Array/ Pointerschreibweise: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:19 Do 15.11.2007
Autor: NetCowboy

ok ich hab die funktions-header umgeschrieben

void belegung( int *zufallsmatrix);  //function prototyp

belegung(*zufallsmatrix);  // function Aufruf

void belegung(int **zufallsmatrix) // die function selber
{
int z,s,i,j;
z=4;
s=4;
for(i=0; i<=z; i++)
for(j=0; j<=s; j++)
   {
    *(*(zufallsmatrix+i)+j)=0;
    }
}

so bekomme keine fehlermeldungen mehr, aber dafür krepiert der linker =)

[Linker Error] Unresolved external 'belegung(int *)' referenced from [mm] C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ [/mm]

[Quelltext Ansicht aktivieren!!!]

Bezug
                        
Bezug
Array/ Pointerschreibweise: Antwort
Status: (Antwort) fertig Status 
Datum: 18:36 Do 15.11.2007
Autor: Martin243

Ja, genau!
Deswegen krepiert der Linker ja auch. Denn die von dir deklarierte Funktion (mit dem einfachen Pointer) existiert ja nicht. Es gibt nur die mit dem Doppelpointer.


Gruß
Martin

Bezug
                                
Bezug
Array/ Pointerschreibweise: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 00:24 Fr 16.11.2007
Autor: NetCowboy

ok ich habe das soweit korrigiert.

jetzt glaube ich aber das es bei mir eher an der deklaration des arrays liegt

ich habe nämlich wie folgt deklariert

int** zufallsmatrix[4][4];
int** ratematrix[8][2];
----------------------------------------------------------
ich glaube ich muß es eher so machen (?)

int zufallsmatrix[4][4],ratematrix[8][2];
int **zmatrix,**rmatrix;

zmatrix=zufallsmatrix;    //zmatrix zeigt auf zufallsmatrix
rmatrix=ratematrix;       //rmatrix zeigt auf ratematrix
---------------------------------------------------------

denn wenn ich die funktionen in der art funktion(**variable)
aufrufe und der funktionsheader die form
void belegung(int **zufall)
hat, dann übergebe ich der funktion ja nur einen wert. ich will jedoch der funktion den zeiger auf das zeigerarray übermitteln. oder?


Bezug
                                        
Bezug
Array/ Pointerschreibweise: Antwort
Status: (Antwort) fertig Status 
Datum: 00:57 Fr 16.11.2007
Autor: Martin243


> jetzt glaube ich aber das es bei mir eher an der deklaration des arrays liegt

Ja.


> ich glaube ich muß es eher so machen (?)

> int zufallsmatrix[4][4],ratematrix[8][2];
> int **zmatrix,**rmatrix;

> zmatrix=zufallsmatrix;    //zmatrix zeigt auf zufallsmatrix
> rmatrix=ratematrix;       //rmatrix zeigt auf ratematrix

Ja, aber warum nicht gleich:
int **zufallsmatrix = new int[4][4];
int **ratematrix = new int[8][2]
?
Dann erzeugst du einen Pointer mit deinem Wunschnamen und weist ihm die Adresse des "anonym" erzeugten Arrays zu. Außerdem ist es kürzer...


> denn wenn ich die funktionen in der art funktion(**variable)
> aufrufe und der funktionsheader die form
> void belegung(int **zufall)
> hat, dann übergebe ich der funktion ja nur einen wert. ich will jedoch der > funktion den zeiger auf das zeigerarray übermitteln. oder?

Wenn im Header (int **zufall) steht, dann heißt es nicht, dass du die Funktion per funk(**zeigervariable) aufrufst, sondern, dass die Funktion einen Zeiger erwartet und du sie mit funk(zeigervariable) aufrufst.
Eine andere Möglichkeit in C++ ist die Parameterübergabe per Referenz, aber ich glaube, das könnte zu weit führen.


Gruß
Martin

Bezug
                                                
Bezug
Array/ Pointerschreibweise: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:19 Fr 16.11.2007
Autor: NetCowboy

jo ich habs heut in der vorlesung gesehen

oh man in pascal war des früher einfacher =)

trotzdem danke

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]