Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[C++]Mehrdimensionales Array

Diskussion: [C++]Mehrdimensionales Array im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi, erstmal der Code: Code: const int hoehe = 10; const int breite = 10; struct S_Feldinfo { bool ...

Antwort
Alt 07.01.08, 19:30   #1 (permalink)
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard [C++]Mehrdimensionales Array

Anzeige

Hi,

erstmal der Code:

Code:
const int hoehe = 10;
const int breite = 10;

struct S_Feldinfo
{
       bool besetzt;
};

S_Feldinfo Feld[hoehe][breite];


int main()
{
    int x;
    int y;
    
    Feld[5][5].besetzt = true;
    
    for ( y = 0; y < hoehe; y ++ )
     {
         for ( x = 0; x < breite; x ++ )
         {
             if ( Feld[x][y].besetzt == true )
             {
                  cout << "X";
             }
             else
             {
                 cout << ".";
             }
         }
         cout << endl;
     };
    
    getchar();
    return EXIT_SUCCESS;
}
so und nun Frage ich mich warum es mit den konstanten hoehe und breite funktioniert, sobald ich diese als nicht konstant deklariere klappt es nicht aber ich manipuliere die Variable in dem restlichen Teil doch gar nicht.
Es kommt immer die Meldung "variable-size type declared outside of any function" ..
welche Funktion ? :x


mfg nookstar
nookstar ist offline   Mit Zitat antworten
Alt 07.01.08, 20:00   #2 (permalink)
 
Registriert seit: 14.06.07
Machine Leistung: Facit NTK
Machine eine Nachricht über ICQ schicken
Likes: 0
Standard

die initialisierung von arrays in c++ erwartet eine konstante größe. das ist alles. die größe mit dem das array initialisiert wird, muss schon vor der kompilierung feststehen. hat sich irgendwer mal so ausgedacht

sonst hättest du ja ein dynamisches array
Machine ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 07.01.08, 20:13   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Du meinst, der Compiler muss nachschauen, ob Du die Variable ja auch nirgendwo veränderst? Ein Javacompiler würde das vielleicht machen (*flame* ).
Nee, soweit ich mich erinnere, wird hier per Grammatikdefinition von C++ schon ein konstanter Ausdruck erwartet.
http://www.math.uni-wuppertal.de/~ax.../oop/oopA.html
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 07.01.08, 20:23   #4 (permalink)
 
Registriert seit: 14.06.07
Machine Leistung: Facit NTK
Machine eine Nachricht über ICQ schicken
Likes: 0
Standard

da hab ich mich wohl ein bisschen komisch ausgedrückt jedenfalls kann man ein array in c++ nur mit einer konstanten größen initialisieren...
Machine ist offline   Mit Zitat antworten
Alt 07.01.08, 20:35   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

M4CH!NE: ich bezog mich eigentlich nur auf den Post von nookstar. Wollte noch einen anständigen Verweis beifügen und hab wohl zu lange mit der Antwort getrödelt . Vor allem da man auf die schnelle keine "anständige" (verständliche) C++ Grammatik zum Nachprüfen findet. Zumindest laut der JavaCC Umsetzung wird sowas erwartet:
Bezeichner [ constant_expr() ]
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 07.01.08, 21:02   #6 (permalink)
 
Registriert seit: 14.06.07
Machine Leistung: Facit NTK
Machine eine Nachricht über ICQ schicken
Likes: 0
Standard

Ok, so kann man aneinander vorbeireden
Machine ist offline   Mit Zitat antworten
Alt 08.01.08, 18:39   #7 (permalink)
Themenstarter
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard

Alles klar danke für die Anworten.

Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Also so :

Code:
char Name[5] = "Tom";
cout << Name;
Name = "hans";
cout << Name;
mfg nookstar
nookstar ist offline   Mit Zitat antworten
Alt 11.01.08, 18:00   #8 (permalink)
 
Registriert seit: 11.01.08
shinobo Leistung: Facit NTK
Likes: 0
Standard

Das gleiche Problem habe ich auch ..

Aber ich glaube man kann nur jeden Char einzelnd ändern in dem man den Index auswählt etwa so:

array[0] = 'n';

Ich frage mich wie man dsa komplette array als ganzes Wort editiert also wie einen string.

mfg
shinobo ist offline   Mit Zitat antworten
Alt 11.01.08, 18:21   #9 (permalink)
 
Registriert seit: 13.12.07
vv4yn3 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Gibt für die Zeile "Name = "hans"" einen Fehler :
Zitat:
ISO C++ forbids assignment of arrays
vv4yn3 ist offline   Mit Zitat antworten
Alt 12.01.08, 11:18   #10 (permalink)
 
Benutzerbild von Avenger
 
Registriert seit: 27.12.03
Avenger Leistung: Facit NTK
Avenger eine Nachricht über ICQ schicken
Likes: 0
Standard

eine möglichkeit währe strcpy()
Avenger ist offline   Mit Zitat antworten
Alt 12.01.08, 13:31   #11 (permalink)
 
Registriert seit: 16.12.06
mastermix252 Leistung: Facit NTK
Likes: 0
Standard

ich kann dir da helfen ... du musst das array dynamisch anlegen uind dsas geht in etwas so

int *array = 0;
array = new int [6];

und wenn du fertig mit dem Prgramm ablauf bist musst du den Speicher des arrays löschen.

delete[] Lotto; // Freigabe des Speichers
Lotto = 0; // Zeiger sichern
mastermix252 ist offline   Mit Zitat antworten
Alt 12.01.08, 16:42   #12 (permalink)
 
Registriert seit: 12.01.08
naluwana Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von vv4yn3
Zitat:
Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Gibt für die Zeile "Name = "hans"" einen Fehler :
Zitat:
ISO C++ forbids assignment of arrays
Technisch gesehen ist ein Array ein Zeiger mit einem zu Anfang zugewiesenen Speicherbereich, aber C++ (im Gegensatz zu C) unterscheidet zwischen Arrays und Zeigern und verbietet (warum auch immer) Array-Zuweisungen. Wenn Du das gleiche also mit einem Zeiger schreibst,
Code:
char *Name = "Tom";
cout << Name;
Name = "hans";
cout << Name;
dann funktioniert die Zuweisung. Aber das klappt genau wie bei der Initialisierung (also der ersten Zuweisung) nur mit konstanten Strings und tatsächlich wird ein neues Array für "hans" erzeugt und "Tom" bleibt im Speicher, wie das folgende Beispiel zeigt:
Code:
char *Name1 = "Tom";
char *Name2 = Name1;
Name1 = "hans";
cout << Name1;
cout << Name2;
Um wirklich den String im ursprünglichen Array zu ändern, benutzt du strcpy(), wie Avenger sagt.
naluwana ist offline   Mit Zitat antworten
Alt 12.01.08, 19:58   #13 (permalink)
 
Registriert seit: 16.12.06
mastermix252 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von nookstar
Alles klar danke für die Anworten.

Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Also so :

Code:
char Name[5] = "Tom";
cout << Name;
Name = "hans";
cout << Name;
mfg nookstar

Natürlich kann man das ändern ...

wenn du ein array ausgeben willst musst du auch den INDEX angeben ... genauso wie bei der zuweisung


Code:
char Name[5] = "Tom"; // [5] ist der index
cout << Name; // hier muss es heissen -> cout << Name[5];
Name = "hans"; // hier wiederum -> Name[INDEX]="hans";
cout << Name;// cout Name[INDEX];
mastermix252 ist offline   Mit Zitat antworten
Alt 12.01.08, 20:42   #14 (permalink)
 
Registriert seit: 12.01.08
naluwana Leistung: Facit NTK
Likes: 0
Standard

Nein, einen Index muss man nur angeben, wenn man auf ein einzelnes Array-Element zugreifen oder es ändern will. Und die Angabe "[5]" in "char Name[5] = "Tom"" ist die Größe des Arrays, kein Index.
naluwana ist offline   Mit Zitat antworten
Alt 14.01.08, 21:03   #15 (permalink)
 
Registriert seit: 13.11.04
The Dude Leistung: Facit NTK
Likes: 0
Standard

wenn man c++ programmiert, dann will man normalerweise std::vector und std::string verwenden. die kuemmern sich dann auch um dieses ganze laestige verwalten von speicher...

http://www.cppreference.com/cppvector/index.html
http://www.cppreference.com/cppstring/index.html

es gibt da noch so ne voellig kaputte funktion um dynamisch speicher auf dem stack zu allozieren; alloca. die sollte man aber meiden wie die pest. :)

aus der glibc manpage zu alloca:

Zitat:
BUGS
The alloca() function is machine and compiler dependent. On many systems its implementation
is buggy. Its use is discouraged.

On many systems alloca() cannot be used inside the list of arguments of a function call,
because the stack space reserved by alloca() would appear on the stack in the middle of the
space for the function arguments.
The Dude ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [C++]Mehrdimensionales Array
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C mehrdimensionales dynamisches Array marcotesoalli Code Kitchen 0 12.11.08 21:27
php curl array string zu array parsen b4ck (Web-) Design und webbasierte Sprachen 5 12.12.07 17:11
c / array reseten bikmaek Code Kitchen 5 15.11.05 18:41
c++ zeichen aus array Paulchen Code Kitchen 2 24.10.05 16:54
C int array[n] zu x int ??? NeoN Code Kitchen 11 25.04.04 20:38


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61