Bolla med matriser, hur?
Postat: 17 apr 2012, 22:11
Jag känner att jag har lite svårt att förklara vad jag egentligen är ute efter, så jag tar några korta exempel på småsaker jag vill veta hur man gör (om möjligt).
Jag vill nu deklarera a[] och b[], där båda ska vara fem element stor. Problemet är att jag vill att a ska peka på c[0] och b på c[5]. Alltså kommer a i detta fall att vara {1,2,3,4,5} och b att vara {6,7,8,9,10}.
Något förslag på hur det enklast görs? Först måste ju antagligen rätt mängd minne allokeras till a respektive b, men hur får man dem att peka rätt?
Om vi lämnar a och b därhän, skulle det vara intressant att kika lite mer på c-matrisen.
Vårt program som hanterar c[] kanske har kört några varv och nu behöver vi inte längre de fem första värdena, så vi vill frigöra det minnet och låta c peka på sjätte elementet istället (gamla c[5]), så att c istället innehåller {6,7,8,9,10}. För att bibehålla samma storlek på c tar vi nu in fem nya värden som vi lägger på slutet, så att c nu innehåller {6,7,8,9,10,11,12,13,14,15}.
Givetvis vet jag att jag kan kopiera de fem sista värdena till de fem första i en enkel loop och sedan fylla på de fem sista värdena hur jag vill, men det är inte det jag är ute efter i detta fall (särskilt inte när antalet värden i mitt ”riktiga” projekt är väldigt många fler). Jag vill hellre göra typ följande, som jag tycker borde går snabbare:
Kod: Markera allt
int c[]={1,2,3,4,5,6,7,8,9,10};
Något förslag på hur det enklast görs? Först måste ju antagligen rätt mängd minne allokeras till a respektive b, men hur får man dem att peka rätt?
Om vi lämnar a och b därhän, skulle det vara intressant att kika lite mer på c-matrisen.
Vårt program som hanterar c[] kanske har kört några varv och nu behöver vi inte längre de fem första värdena, så vi vill frigöra det minnet och låta c peka på sjätte elementet istället (gamla c[5]), så att c istället innehåller {6,7,8,9,10}. För att bibehålla samma storlek på c tar vi nu in fem nya värden som vi lägger på slutet, så att c nu innehåller {6,7,8,9,10,11,12,13,14,15}.
Givetvis vet jag att jag kan kopiera de fem sista värdena till de fem första i en enkel loop och sedan fylla på de fem sista värdena hur jag vill, men det är inte det jag är ute efter i detta fall (särskilt inte när antalet värden i mitt ”riktiga” projekt är väldigt många fler). Jag vill hellre göra typ följande, som jag tycker borde går snabbare:
- Låt c peka på c[5].
- Frigör gamla c[0] till och med gamla c[4] från minnet.
- Allokera fem nya element till c.
- Fyll på med fem nya värden i den nyallokerade området.