Archief - [PROG][C] points naar arrays/structures

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Darth-Falcon

Legacy Member
ik heb een klein probleem

ik heb 2 structures:

Code:
 struct object_data
 {
	int x1, y1, x2, y2, radius, color, style, type;

 };


 struct object
 {
 int x,y,n_draw ;

 };

in de main definieer ik bv een array van 5 structures object_data en 1 structure object

struct object_data gebouw_d[5];
struct object gebouw;

een functie:

Code:
void draw_object(struct object *naam, struct object_data *data )
{

int x;

x = data[1]->x1;

}

int de main word deze opgeroepen met:

draw_object(&gebouw, &gebouw_d);

mijn probleem is nu dat ik via die structure pointer in de functie er niet in slaag om de array aan te spreken via de index zoals hierboven :help:

sys4096

Legacy Member
Lang geleden, maar moet het niet struct object_data gebouw_d[5]; zijn ?

Darth-Falcon

Legacy Member
weer iets te rap om hulp geroepen zoals gewoonlijk :crazy:

Code:
void draw_object(struct object *naam, struct object_data *data )
{
int x,y;
char tekst[10];
  x = (*data).x1;
  y = (*data).y1;
  setcolor(3);
 sprintf(tekst, "%d %d", x, y);
 outtextxy(0,0,tekst);
 data++;

  x = (*data).x1;
	 y = (*data).y1;
  setcolor(3);
 sprintf(tekst, "%d %d", x, y);
  setcolor(3);

 outtextxy(0,10,tekst);
//programma enzo

}

zet maar slotje op ofzo :unsure:

kwitters

Legacy Member
In jou geval kan je ipv (*data).x1 beter data->x1 gebruiken. Dat wordt meer gebruikt en typt sneller ;). De -> is speciaal ontworpen voor dit soort gevallen (omdat het toch vrij vaak voorkomt in c/c++).

wlibaers

Legacy Member
En geen problemen met dit stukje?
struct object_data gebouw_d[5];

Als je dan dit doet:
draw_object(&gebouw, &gebouw_d);
dan is die tweede parameter eigenlijk niet van type pointer naar object_data, maar van type pointer naar een array van 5 object_data's. De compiler zou daarvoor eigenlijk een waarschuwing moeten geven (of heb je dat deel van het programma ook veranderd?)
http://c-faq.com/aryptr/aryvsadr.html

Darth-Falcon

Legacy Member
ja der zijn een paar waarschuwing maar die negeer k, zolang het ma werkt :p


struct object_data stickman_d[STICKMAN_NR] = {{3,3,0,0,0,14,1,3,0,0,6,6,0,0,0},
{3,10,3,30,3,6,0,6,0,0,0,0,0,0,0},
{3,30,15,45,3,6,0,6,0,0,0,0,0,0,0},
{3,30,-9,45,3,6,0,6,0,0,0,0,0,0,0},
{3,13,15,16,3,6,0,6,0,0,0,0,0,0,0},
{3,13,-9,16,3,6,0,6,0,0,0,0,0,0,0},
{3,6,0,0,1,4,0,2,180,360,4,2,0,0,0},
{1,2,0,0,0,1,0,4,0,0,0,0,0,0,0},
{6,2,0,0,0,1,0,4,0,0,0,0,0,0,0},
{0,-20,0,0,0,10,0,5,0,0,0,0,0,0,"duuuuude"}
};



struct object stickman = {100,100,STICKMAN_NR};



met dit teken ik een stickmanneke :p

kwitters

Legacy Member
Darth-Falcon zei:
ja der zijn een paar waarschuwing maar die negeer k, zolang het ma werkt :p

Aiaiai! Compiler waarschuwingen kan je beter niet negeren aangezien ze je soms een hoop miserie kunnen besparen, vooral als het over geheugen gaat. Goed opgemerkt trouwens van wlibaers, die had ik nog ni gezien :$.

Ik raad je aan om toch eens dieper op pointers/arrays in te gaan, zoals bijvoorbeeld hier.
Pointers zijn heel belangrijk in c/c++, en het is beter dat je weet wat je aan't doen bent, want anders ga je nog op heel vreemde problemen stoten.

killgore

Legacy Member
http://www.gamedesign.be/wiki/index.php?title=Programmeren/Tutorials/cpp/arrays_allocatie

gaat over allocatie arrays, maar er wordt ook min of meer de pointer-array gelijkenis in uitgelegd. Enige is, tis van mezelf, dus ik weet niet hoe duidelijk het is, mij kennende kan dat nogal tegenvallen :/

En ik volg kwitters: beste dat je zelfs kan doen is compileropties aanschakelen zoals "treat warning as errors", als er dan specifieke warnings (unsafe functions bv in vs) zijn die je wilt negeren, moet je die maar specifiek uitschakelen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan