Toon posts:

[C] 2 dimensionaal variable size integer array doorgeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een functie die een 2D integer array voor zijn kiezen krijgt met een variabel aantal kolummen en rijen. Hoe moet ik die functie nu declareren?

Declaraties die in ieder geval niet werken zijn:

functie(int ** array)
functie(int * array)
functie(int array[][])

Wat wel werkt is:

functie(int array[][5]),

maar daarmee leg ik mijn aantal kolummen vast en dat wil ik niet.

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 19-08 19:58
en:

functie(int *array[]) ?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Nogal wiedes dat opties 1 en 3 niet werken: zonder de 'rowwidth' te weten kan de compiler natuurlijk onmogelijk indexeren. Hoe reserveer je de array?

Professionele website nodig?


Verwijderd

Topicstarter
@Paradot: Nee, werkt ook niet

@Curry: De functie hoeft toch alleen te weten waar het array staat?
De array wordt in een include file als volgt gedeclareerd:

static int[x][y] { { 0,1,2,3,... } {0,1,2,3,...} .... }

Edit: Ik weet trouwens wel hoe groot de array is op het moment dat ik de functie aanroep. Kan ik hiermee de functie misschien vertellen hoe groot het array is dat hij kan gaan verwachten?

[ Voor 67% gewijzigd door Verwijderd op 27-08-2003 11:01 ]


Verwijderd

dit moet werken functie(int ** array)

dus waarschijnlijk een fout in je functie of in het aan roepen van de functie

Verwijderd

Topicstarter
Nope werkt niet, ik weet 100% zeker dat er geen fout zit in mijn functie aanroep

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

@Curry: De functie hoeft toch alleen te weten waar het array staat?
Echt niet: binnen een array van 4*4 staat element [2][2] op positie 2*4+2 = 10. Binnen een array van 5*5 staat element [2][2] op positie 2*5+2 = 12. De breedte is dus wel degelijk van belang, en daarom staat de compiler het niet toe.

Ik zou gewoon een platte eendimensionale array maken als ik jou was, en gewoon zelf indexeren.

Professionele website nodig?


Verwijderd

goed dan zit er een fout in je functie dit is namelijk zo enorm standaard als je in een random stukje code kijkt zie je dit regelmatig voor komen

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

dit moet werken functie(int ** array)
Nee, dit impliceert een array van int*'s, oftewel een pointer naar een array van pointers naar arrays van ints.

int[5][5] is gewoon equivalent aan int[25] met wat rekenwerk door de compiler voor je gedaan.

Professionele website nodig?


Verwijderd

Topicstarter
Ja je hebt gelijk, ik denk niet dat het mogelijk is want de compiler moet weten hoeveel kolommen er zijn. Ik zal moeten zoeken naar een andere oplossing. Array anders declareren is geen mogelijkheid aangezien de .h file van buitenaf wordt aangeleverd en dus niet kan worden aangepast.

Verwijderd

@curry

Ik ben het helemaal met je eens

Verwijderd

nou als je echt niet de h file kan aanpassen...
kan je nog altijd een cast gebruiken

hint: er zit een Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif-knopje rechtsbovenin je post :)

[ Voor 50% gewijzigd door curry684 op 27-08-2003 11:33 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Joost, lees [rml]curry684 in "[ C] 2 dimensionaal variable size integer"[/rml] nog eens:
Ik zou gewoon een platte eendimensionale array maken als ik jou was, en gewoon zelf indexeren.
:+
:z
edit:
Die was je nog vergeten curry :+

[ Voor 10% gewijzigd door whoami op 27-08-2003 11:34 ]

Professionele website nodig?

Pagina: 1