Δημοσιεύτηκε: 18 Μαρ 2012, 17:28
από Ilias95
migf1 έγραψε:
Ilias95 έγραψε:@migf1
Μου πήρε αρκετή ώρα αλλά τελικά νομίζω ότι επιτέλους κατάλαβα πως δουλεύει.

Το κλειδί στην κατανόησή του είναι η κατανόηση του πως δουλεύει το pointer-arithmetic.

Από τη στιγμή που...

α) ο 2-διάστατος πίνακας a[NROWS][NCOLS] όπως ξέρουμε εσωτερικά υλοποιείται μονοδιάστατα σε συνεχόμενη μνήμη, συνολικού μεγέθους (NROWS * NCOLS) * sizeof(int) bytes

β) το p ορίζεται δείκτης σε πίνακα NCOLS ακεραίων (δηλαδή ανά πάσα στιγμή δείχνει σε τμήμα μνήμης μεγέθους NCOLS * sizeof(int) bytes)

τότε κάθε p++ προχωράει στη μνήμη κατά NCOLS ακέραιους, που επί της ουσίας είναι μια γραμμή του πίνακα a[ ] [ ] (το p-- θα πήγαινε πίσω κατά NCOLS ακέραιους).

Δηλαδή κάθε ++ του p προχωράει αυτόματα τον p κατά NCOLS * sizeof(int) bytes στη μνήμη ;)


Ναι, σωστά το κατάλαβα τελικά.
Ευχαριστώ.