Hallo Stefan
Man gibt die Arrays einfach in einer
Struktur zurück (falls es mal sein muss).
Ja auf irgendwelchen Gigahertz Boliden kann man sich so was
leisten, irgendwie müssen die ganzen Hertze
ja verballert werden, aber auf einem kleinen
schnuckeligen Rechner wirst du dafür mit
mehreren Monaten Assembler Programmierung bestraft.
Auch wenn man das Denken könnte, das stimmt nicht.
Wenn Du Arrays oder Blocks auf beschriebene Weise
‚direkt‘ Aus Funktionen zurückgibst, so ist das
für kleine Arrays (~ bis 4,096) eventuell
sogar schneller als die (normale) Rückgabe über Zeiger.
Und kürzer + prägnanter noch dazu.
Erst bei größeren Arrays ~ > 20,000 macht
sich die zusätzliche (implizite) Kopiererei
bemerkbar, dann fällt die direkte Methode
zurück.
bei mir: (P3-750, gcc/4 -O3)
kleine Arrays (20x20,direkt mit Struktur ist schneller):
Array size: 400 bytes ...
Direct: 390000 clocks, Indirect: 400000 clocks
größere Arrays (200x200,indirekt mit Zeigern ist schneller, wenn auch kaum):
Array size: 40000 bytes ...
Direct: 36520000 clocks, Indirect: 33960000 clocks
… nur zur Information.
(Quellen im Anhang)
Grüße
CMБ
#include
#include
#include
#include
#include
#define SIZE 20
typedef struct { char elem[SIZE][SIZE]; } ArrI0; // wrapped in struct
/\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \*/
ArrI0 DirectArrayReturn(void)
{
int x,y;
ArrI0 feld;
for(y=0; y