Om arrayen sparas linjärt borde det ju betyda samma, om man anger radlängden som i ditt sista exempel.
När det gäller dynamisk allokering vet jag inte om det alltid spara linjärt. Fast det använder jag ändå inte på en uC.
Arrayer som initeras från början borde ju sparas linjärt. Men jag vet inte.
varden1[x][y]={{..},{..}...};
Ditt sista exempel testade jag i min applikation och det funkade fint. Tackar!
Hur det funkar förstår jag dock inte, dvs vad char(*varden)[x] egentligen betyder.
'char(*varden)[x]' tror jag att kompilern uppfattar som 'char * varden[x]' och då är det ju ganska mycket tydligare, det är alltså ett array med x medlemmer av char-pekare.
Jag misstänkar dock att deklarationen egentligen borde vara:
'char * varden'
vilket är en pekare på char. Vill man indexera enklare kan man kanske deklarera den som:
'char[x][y] * varden'
Men för att göra det hela tydligare hade jag vald att använda en typedef:
typedef char[x][y] T_VALUES;
T_VALUES * varden;
T_VALUES varden1;
T_VALUES varden2;
T_VALUES varden3;
T_VALUES varden4;
Strombom, ja, så måste det ju vara. D.v.s har man en pekare som deklarerats: char (*pekare)[radlangd]; och kör: pekare++; kommer kommer adressen öka med radlangd*sizeof(char).
Icecap, nej jag har testat och det blir skillnad.
I min komplator gick det inte att skriva arraystorleken innan variabelnamnet.