Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Pointer auf 2d array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.03.2004, 18:41 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich versuche schon seit einiger Zeit einen Pointer auf ein 2d array zu bekommen

C++:
#include <stdio.h>

int main()
{
   int multi[2][2] = {{1,2},{3,4}};
   int *p;
   int **pp;

   p = &multi[0][0];
   pp = &(*(*multi));

   printf("%d\n",*p);
   printf("%d\n",*(*(multi + 0) + 1)); /*[0][1]*/
   printf("%d\n",*(*(multi + 1) + 1)); /*[1][1]*/
   printf("%d\n",*(p+1)); /*[0][1]*/

   /* warning: assignment from incompatible pointer type*/    
   printf("%d\n",*pp); /*[0][0]*/
   printf("%d\n",*(pp+1)); /*[0][1]*/

   return 0;
}


Leider bekomme ich beim pp eine Warnung.
Das weit größere Problem ist, dass es nicht funktioniert Ich möchte auf das erste Element zeigen - und wenn ich den Zeiger erhöhe möchte ich auf das [1][0] Elemnt zeigen. Muss ich da den Zeiger um 2 erhöhen?
Ich denke, dass es ja so im Arbeitsspeicher liegt
[0][0] [0][1] [1][0] [1][1]
Kann man da irgendwie die Pointer zeilenweise setzen?

Danke im Voraus!!
mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.03.2004, 19:25 Uhr
mike
Pinguinhüpfer
(Operator)


Ich glaube jetzt hab ichs

C++:
#include <stdio.h>

int main()
{
   int matrix[5][4] = {{10,20,30,40},
                     {15,25,35,45},
                     {20,30,40,50},
                     {25,35,45,55},
                {25,35,45,55}};
   int (*pZeilen)[4] = matrix;
  
   printf("line 1: %d\n", **pZeilen);
   printf("line 2: %d\n", **(pZeilen+1));

   return 0;
}


Is das kompliziert :P

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.03.2004, 12:56 Uhr
kronos
Quotenfisch
(Operator)



C++:
int **pmatrix = matrix;


sollte gehen.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.03.2004, 14:06 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Danke für deine Antwort!!!
Ich habs versucht nur leider gings nicht. Die Warnung lautete "warning: initialization from incompatible pointer type". Ich hab so zugegriffen "printf("%d",*(*(pmatrix+1)+1));". Da ist das Programm dann leider abgestürtzt.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.03.2004, 14:54 Uhr
kronos
Quotenfisch
(Operator)


ist ja nur 'ne warnung
du kannst ja einen (int**)-cast davorschreiben.

der absturz ist wohl eher darauf zurückzuführen, dass die deklarierung eines mehrdimensionalen arrays nicht automatisch den speicher reserviert.

C++:
int matrix[5][4];

könnte im grund auch

C++:
int* matrix[5];

heißen.
du musst also noch sowas in der art machen:

C++:
int n;for(n=0;n<5;matrix[n++]=malloc(4*sizeof(int)));
// und danach:
for(n=0;n<5;free(matrix[n++]));

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 19.03.2004 um 14:55 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.03.2004, 15:05 Uhr
mike
Pinguinhüpfer
(Operator)


Stimmt. An das hatte ich gar nicht gedacht

Danke für deine Hilfe!
Werde das Kapitel wohl noch mal unter die Lupe nehmen müssen

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: