2dim array



  • Hallo NG

    Was ist allgemein schneller, besser?

    #define a(i,j) a[n*(i)+(j)]
    a(i,j)

    oder

    a[i][j]

    Gruss Roger



  • rmer547 schrieb:

    a[i][j]

    Ist besser da Makros schlecht sind. Was hat denn eigentlich das n für einen Wert in deinem Makro?



  • wird iirc intern gleich behandelt^^


  • Mod



  • camper schrieb:

    es geht hier um 2 dimensionale arrays. ich habe dieses makro in einem code gefunden und mich gefragt, wieso der verfasser dieses konstrukt einem zwei dimensionalen array bevorzugt. vermutlich ist dies schneller in der indirekten adressierung? kann mir aber vorstellen, dass dies kein unterschied macht, natürlich auch compiler abhängig...

    Chris++ schrieb:

    Ist besser da Makros schlecht sind. Was hat denn eigentlich das n für einen Wert in deinem Makro?

    n ist die anzahl zeilen. ich dachte eigentlich, dass dies aus dem titel ersichtlich wäre, sorry. Mit der Behauptung, dass Makros generell schlecht sind, würde ich hier etwas vorsichtig sein. Zielsystem ist ein Nokia Handy und hier ist die Performance doch ein wichtigerer Aspekt als auf einem PC...


  • Mod

    rmer547 schrieb:

    camper schrieb:

    es geht hier um 2 dimensionale arrays. ich habe dieses makro in einem code gefunden und mich gefragt, wieso der verfasser dieses konstrukt einem zwei dimensionalen array bevorzugt. vermutlich ist dies schneller in der indirekten adressierung? kann mir aber vorstellen, dass dies kein unterschied macht, natürlich auch compiler abhängig...

    der aufbau von arrays ist sehr genau festgelegt.

    union
    {
        T a[rows*columns];  // T irgendein typ, rows,columns beliebige positive konstante ausdrücke
        T b[rows][columns];
    };
    
    // es gilt stets
    &a[x*columns+y]==&b[x][y]  // für 0<=x<rows und 0<=y<columns
    

    das folgt unmittelbar aus der definition des index-operators. es macht also am ende keinen unterschied, bei der eindimensionalen abbildung bedeutet es für den programmierer nur zusätzliche arbeit.


Anmelden zum Antworten