PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] 2D Vektor mit Funktion ausgeben


Mark
2010-12-07, 22:36:28
gelöscht

Gast
2010-12-07, 22:52:05
char ** ?

Mark
2010-12-07, 22:55:00
gelöscht

Coda
2010-12-07, 23:02:30
char** ist aber korrekt. Du hast irgend nen anderen Fehler dann. Code zeigen.

Mark
2010-12-07, 23:05:22
gelöscht

Coda
2010-12-07, 23:35:28
Das ist nicht der vollständige Code, tut mir leid.

Mark
2010-12-07, 23:39:58
gelöscht

del_4901
2010-12-07, 23:44:13
Gibt er alles in einer Zeile aus? Das liegt dann wohl an dem verrutschten newline.

Mark
2010-12-07, 23:44:36
gelöscht

robobimbo
2010-12-07, 23:45:36
void Print_2DVek_Char (char *v, int n, int n2) {
int i,j;
// char *pv = v;

for (i=0;i<n;i++){
for (j=0;j<n2;j++){
printf("%c ",v[i*n2+j]);
};
printf("\n");
};

}


int main(int argc, char **argv)
{
char v[5][5] = {
{ '0', '1', '2', '3', '4' },
{ '5', '6', '7', '8', '9' },
{ ' ', ' ', ' ', '*', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
};

Print_2DVek_Char(&v[0][0], 5, 5);

return 0;
}


Du hast ein Array aus Arrays.

Das erste Element in dem äusseren Array ist also ein Array, daher funktioniert der Pointer auf einen Pointer nicht, sonder es ist ein Pointer auf ein Array...

Im Code ist ein Workaround dazu, übergib an die Funktion die Adresse des ersten Elements des ersten Arrays und rechne dann die Position dazu aus...

Detailinfo siehe: http://www.lysator.liu.se/c/c-faq/c-2.html

Mark
2010-12-08, 00:08:09
gelöscht

pest
2010-12-08, 00:12:44
definiere v als pointer char** und erzeuge den speicherplatz mit new. Type[N] kannst normal als pointer mittels &-Operator übergeben. Bei Type[N][M] wirds aber ungemütlich, oder du schreibst deinen Funktionskopf in char*[5] um.

Gast
2010-12-08, 00:19:18
#include <stdio.h>
//#include "mylib.h"

void Print_2DVek_Char (char v[5][5], int n, int n2) {
int i,j;
for (i=0;i<n;i++){
for (j=0;j<n2;j++){
printf("%c ",v[i][j]);
};
printf("\n");
};
}

int main() {
int i,j,n=5,n2=5;

char v[5][5] = {
{ ' ', '*', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', '*', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
};

Print_2DVek_Char(v,5,5);


return 0;
}
Es gibt übrigens eine Menge Bibliotheken mit denen man sowas wesentlich komfortabler machen kann, std::string wäre schonmal ein guter Anfang. Ich verstehe sowieso nicht wieso jemand sich heutzutage noch mit char* rumschlägt...

Mark
2010-12-08, 10:53:45
gelöscht

Gast
2010-12-08, 11:56:28
Nein, du übergibst der Funktion nur einen Pointer auf die Daten, wenn du die Daten änderst, änderst du die Daten also tatsächlich, nicht nur eine Kopie auf dem Stack

robobimbo
2010-12-08, 14:14:56
definiere v als pointer char** und erzeuge den speicherplatz mit new. Type[N] kannst normal als pointer mittels &-Operator übergeben. Bei Type[N][M] wirds aber ungemütlich, oder du schreibst deinen Funktionskopf in char*[5] um.

Gute Frage @ Threadersteller, gehts um C oder C++ ?

Mark
2010-12-08, 17:48:52
gelöscht