Δημοσιεύτηκε: 17 Μαρ 2012, 15:28
Λοιπόν τον παραπάνω κώδικα τον βρήκα απ' το βιβλίο του King. (σελ. 269)
Τώρα με μπέρδεψες εντελώς.
Ο King λέει:
Άλλο πράγμα δεν λες εσύ και άλλο δεν λέει ο King; Η ξέχασα τα Αγγλικά που ήξερα;
Αν κάνω τον πίνακα 4x3, έτσι όπως είναι πάλι θα δουλέψει:
Αν όμως αλλάξω το (*p)[NUM_COLS] σε (*p)[NUM_ROWS]:
Και αυτό που θα εκτυπωθεί τελικά δεν θα είναι σωστό.
Έτσι όπως είναι τώρα δουλεύει κανονικά.
Αν το κάνω "for ( x = &a[0]; ..." πάλι θα εκτυπωθεί το σωστό αποτέλεσμα όμως θα πάρω κατά το compile:
Γιατί αυτό;
Ευχαριστώ.
ΥΓ. Δεν είδα ακόμα το τελευταίο σου post.
migf1 έγραψε:Το p σε αυτή την περίπτωση είναι πίνακας από δείκτες ακεραίων (array of integer pointers). Δηλαδή το κάθε στοιχείο του p είναι: (int *). Επί της ουσίας το κάθε στοιχείο του p έχει τη δυναμική να δείχνει σε έναν πίνακα από int, που στο συγκεκριμένο παράδειγμα (με το loop) είναι μια σειρά (γραμμή) του a.
Τώρα με μπέρδεψες εντελώς.
Ο King λέει:
King έγραψε:I' ve declared p o be a pointer to an array of length NUM_COLS whose elements are integers. The parenthesis around *p in (*p)[NUM_COLS] are required; without them, the compiler ould treat p as an array of pointers instead of a pointer an array.
Άλλο πράγμα δεν λες εσύ και άλλο δεν λέει ο King; Η ξέχασα τα Αγγλικά που ήξερα;
migf1 έγραψε: Πρέπει όμως νομίζω να το ορίσεις με NUM_ROWS αντί για NUM_COLS...
Αν κάνω τον πίνακα 4x3, έτσι όπως είναι πάλι θα δουλέψει:
Spoiler: show
Αν όμως αλλάξω το (*p)[NUM_COLS] σε (*p)[NUM_ROWS]:
- Κώδικας: Επιλογή όλων
gcc -W -Wextra -Wall -std=c99 -o "pun" "pun.c"
pun.c: In function ‘main’:
pun.c:11:12: προειδοποίηση: assignment from incompatible pointer type [enabled by default]
pun.c:11:23: προειδοποίηση: comparison of distinct pointer types lacks a cast [enabled by default]
Και αυτό που θα εκτυπωθεί τελικά δεν θα είναι σωστό.
migf1 έγραψε:ΥΓ. Επίσης, στο print-loop, πρέπει να είναι: for ( x = &a[0]; ...
Έτσι όπως είναι τώρα δουλεύει κανονικά.
Αν το κάνω "for ( x = &a[0]; ..." πάλι θα εκτυπωθεί το σωστό αποτέλεσμα όμως θα πάρω κατά το compile:
- Κώδικας: Επιλογή όλων
pun.c:15:12: προειδοποίηση: assignment from incompatible pointer type [enabled by default]
Γιατί αυτό;
Ευχαριστώ.
ΥΓ. Δεν είδα ακόμα το τελευταίο σου post.