003
17.05.2006, 06:00 Uhr
Helmut
|
Hi!
C++: |
void eingab3(paarung_t ***spielplan,mannschaften_t *test)
|
***spielplan Brrrrrr!
Bei Dir findet die Fussball-WM wohl jetzt schon statt!?
Also Zeiger auf Zeiger auf Zeiger - kann man machen -> aber nicht bei mehrdimensionalen Arrays! Der Compiler muß ab der zweiten Dimension die Feldgrenzen kennen.
Und in ner for Schleife Speicher allokieren um sowas nachzubilden, kann ja wohl nicht das Wahre sein, selbst dann nicht, wenns am Ende funktionieren sollte.
Hab Dein Programm etwas abgeändert :
C++: |
# include <stdio.h> # include <stdlib.h> # include <malloc.h> # include <string.h>
typedef struct{ char Name[30]; int Tore; } mannschaften_t;
typedef struct{ int heim; int gast; int plus; int minus; } paarung_t;
void eingab(mannschaften_t *teilnehmer){
teilnehmer[0].Tore = 4; teilnehmer[1].Tore = 5; teilnehmer[2].Tore = 6; printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); strcpy(teilnehmer[0].Name ,"Tobi"); strcpy(teilnehmer[1].Name ,"Mutti"); strcpy(teilnehmer[2].Name ,"alex"); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); }
void eingab2(mannschaften_t **test){
*test = (mannschaften_t*)malloc(3 * sizeof(mannschaften_t)); if(test == NULL) printf("NO"); (*test)[0].Tore = 4; (*test)[1].Tore = 5; (*test)[2].Tore = 6; strcpy((*test)[0].Name,"Marco"); strcpy((*test)[1].Name,"danni"); strcpy((*test)[2].Name,"Tim"); printf("%i,%i,%i\n",(*test)[0].Tore,(*test)[1].Tore,(*test)[2].Tore); printf("%s,%s,%s\n",(*test)[0].Name,(*test)[1].Name,(*test)[2].Name); }
typedef paarung_t(*pspielplan)[3]; //! und nicht ***spielplan // Der Compiler muß bei Mehrdimensionalität die Feldgrenzen kennen.
void eingab3(pspielplan& spielplan,mannschaften_t* test){ //pspielplan& spielplan Übergabe per Referenz spielplan = (pspielplan)malloc(3*3*sizeof(paarung_t)); //gesamten benötigten Speicher auf einmal allokieren. if( spielplan == NULL) printf("NO"); spielplan[0][0].heim = (int)&test[0]; spielplan[1][0].heim = (int)&test[1]; spielplan[2][0].heim = (int)&test[2]; printf("%s\n",spielplan[0][0].heim); }
int main (void){
mannschaften_t* teilnehmer, *test; pspielplan spielplan ;
teilnehmer = (mannschaften_t*)malloc(3 * sizeof(mannschaften_t)); if(teilnehmer == NULL) printf("NO"); teilnehmer[0].Tore = 1; teilnehmer[1].Tore = 2; teilnehmer[2].Tore = 3; strcpy(teilnehmer[0].Name ,"Marco"); strcpy(teilnehmer[1].Name ,"Dani"); strcpy(teilnehmer[2].Name ,"tim"); printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); eingab(teilnehmer); printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); printf("****************************************************************\n"); eingab2(&test); printf("%i,%i,%i\n", test[0].Tore,test[1].Tore,test[2].Tore); printf("%s,%s,%s\n",test[0].Name,test[1].Name,test[2].Name);
printf("****************************************************************\n"); eingab3(spielplan,test); printf("%s\n",spielplan[0][0].heim);
free(spielplan); free(test); free(teilnehmer); }
|
|