Aktuelle Zeit: 22.12.2024, 14:37

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 27.03.2008, 14:54 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
ja auch wenn ich ab und an selbst anderren helfe weil ich mehr als ein totaler anfänger weis, dennoch ist mein wissen noch nicht gross genug um grosse projekte mitzumachen oder selbst zu beginnen.

nunja jetzt mein problem, dabei geht es um arrays und um genau zu sein um derren pointer:

ein array aus integern wird ja so deklariert:
Code:
...
int aZahl[10];
...
wenn ich dieses array an eine funktion weiter gebe und ich aber irgendwo anders das array noch vergrösser, weis ich ja nichtmehr wie gross das array eigentlich ist. um dort durch das array zu gehen bestimme ich die anzahl der elemente des array indem ich prüfe wie viel speicher das array verbraucht und rechne dies dann durch die grösse eines integer
Code:
...
int ArraySize = (sizeof(array) / sizeof(int));
...
wenn ich das jetzt hab kann ich durch das array gehen ohne über die grenze hinaus zu gehen.
das ganze kann ich nun auch für char anwenden um die länge eines strings bestimmen zu können,
Aber wie macht man das jetzt bei zweidimensionalen arrays und das beforzugt bei strings.
denn wenn ich jetzt die grösse des arrays bestimme, kann doch jede weiterre dimension unterschiedlich gross sein.

an der stelle hab ich nurnoch fragezeichen for augen.


Nach oben
 Profil  
 
BeitragVerfasst: 27.03.2008, 15:13 
Offline

Registriert: 17.11.2007, 11:15
Beiträge: 19
Ich würde das einfach mit "richtigen" Strings und/oder vector machen.

Ein Beispiel zur Verwendung von so einem dynamischen Array:
Code:
#include <vector>
#include <iostream>

using namespace std;

int main()
{
    vector<int> zahlen;
    zahlen.push_back(1);
    zahlen.push_back(94);
    zahlen.push_back(0);
   
    for (int i = 0; i < zahlen.size(); i++)
        cout << zahlen[i] << endl;
}


Nach oben
 Profil  
 
BeitragVerfasst: 27.03.2008, 15:24 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
jap, es ist unmöglich allein von der fläche eines vierecks auf seine kantenlängen zu schließen.
obwohl der vergleich hinkt, denn array-indizes sind ganzzahlig (teiler) und mehrdimensionale arrays gibt es nicht tatsächlich. sie sind nur eine bequemere schreibweise für ein sehr großes array. (dh [3][44] ist nur eine andere schreibweise für [3*row_length+44])
am einfachsten wäre es, vector und string aus stl verwenden ;)

[edit]
argh desx war schneller, egal. kommt aufs selbe hinaus..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
BeitragVerfasst: 01.04.2008, 00:34 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
nunja mich würde es trotzdem mehr als nur interressieren, wie man das ganze in c also ohne vector / list machen kann


Nach oben
 Profil  
 
BeitragVerfasst: 02.04.2008, 18:12 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Merk Dir doch einfach die Größe, zum Beispiel in einer globalen Variable wenns in c sein soll.

Du hast ja sicher Funktionen an die Du das Array übergibst um es zu vergrößern, dann kannst Dir auch gleich die neue Größe merken.

Ich hab sowas ähnliches mal für eine Karte gemacht, dabei hab ich nen Header gehabt.
Code:
struct tMAPHEADER
{
  char nameValue[256];               
  __int32 versionValue;               
  char nameTilesetValue[256];     
  __int32 sizeX;                         
  __int32 sizeY;
  __int32 sizeZ;
};

Wobei in sizeX/Y/Z jeweils die Größe (Dimension) stand. Damit wusste ich immer wieviel Speicher ich für die einzelnen Dimensionen brauchte, ging um das Laden aus einer Datei. Ist bei Dir aber ja vergleichbar.

Also ich würd sowas in der Art machen.
Code:

struct myArray
{
  int *data;
  int size;
};

void myArrayInit(myArray *val, __int32 size)
{
  val->data = new int[size];
  val->size = size;
}

void myArrayVergroessern(myArray *val, __int32 newSize)
{
  int *newData = new int[newSize];
  int *tmp = val->data;
  for (__int32 i = 0; i<val->size; i++)
  {
    newData[i] = val->data[i];
  }
  val->data = newData;
  val->size = newSize;
  delete tmp;
}

int main()
{
  myArray *arr = new myArray;
  myArrayInit(arr, 10);
  arr->data[0] = 10;
  arr->data[1] = 20;
  arr->data[2] = 30;
  arr->data[3] = 40;
  arr->data[4] = 50;
  arr->data[5] = 60;
  myArrayVergroessern(arr, 20);
  arr->data[12] = 100;
  return 0;
}

Wobei statt new vielleicht malloc etc. benutzt werden sollte, war aber so einfacher zu tippen. :)


Nach oben
 Profil  
 
BeitragVerfasst: 02.04.2008, 18:31 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
oO new in C ??
man sollte doch malloc() und free() nehmen ;)

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
BeitragVerfasst: 02.04.2008, 19:40 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Lässt sich wohl so bestens als C++ kompilieren, auch wenn der Programmierstil doch stark nach C riecht :)

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 03.04.2008, 11:14 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Hab ich doch ganz unten geschrieben. :)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de