migf1 Δημοσ. 30 Μαΐου 2011 Δημοσ. 30 Μαΐου 2011 Φίλε, σε ευχαριστώ πολύ για την απασχόλησή σου με το θέμα και σόρρυ αν σε κούρασα Το προγραμματάκι δουλεύει μια χαρά τώρα και πιστεύω ότι το έχω πια . Χαίρομαι Θα συμφωνήσω μαζί σου για το typedef, αφού ενώ δεν αλλάζει ουσιαστικά τίποτα, ούτε δυσκολεύει πολύ η χρήση, βλέποντας τον κώδικα αργότερα, μπορεί να δυσκολευτεί κανείς αρκετά μέχρι να καταλάβει τι γίνεται. Κοίτα να δεις γιατί έφριξα με το παραπάνω (που δυστυχώς το διδάσκουν κιόλας)... το ζητούμενο είναι ο κώδικάς μας να είναι όσο το δυνατόν πιο ευδιάκριτος σε όποιο σημείο κι αν τον κοιτάμε, είτε εμείς είτε κάποιοι άλλοι (ιδίως μετά από κάμποσο καιρό). Όσο πιο ευδιάκριτος, τόσο λιγότερες οι πιθανότητες δημιουργίας bugs και τόσο περισσότερες οι πιθανότητες ευκολότερης συντήρησής του, ακόμα κι επέκτασής του. Όταν λοιπόν βλέπεις ένα πρότυπο: > void foo( datatype *, ...); δεν πρέπει με την καμία να "μυρίζεις" τα νύχια σου για να καταλαβαίνεις πως το datatype είναι ήδη pointer σε άλλο datatype, και άρα το πρότυπο ισοδυναμεί με: > void foo( otherdatatype **, ...); Αυτό το τελευταίο, ΔΕΝ σηκώνει καμία παρερμηνεία, ούτε "υποκρύπττει" μέσα του κάτι διαφορετικό από αυτό που είναι γραμμένο. Απορώ ειλικρινά δηλαδή, είναι δυνατόν σε ΣΧΟΛΗ να προάγουν/διδάσκουν τέτοιες ... άντε να μη τις πω; !!!!!!!!! Λες και δεν είναι ήδη ζόρικη η κατανόηση των pointers από μόνη της, τέσπα! Μια ερώτηση: είτε πω > node_t *head=NULL; InsertPoint(head, p); είτε >node_t head = NULL; InsertPoint( &head, p ); το ίδιο πράγμα δεν είναι? Σε κάθε περίπτωση η διεύθυνση του δείκτη δεν περνάει στην InsertPoint? Ναι, αλλά μετά παίζει ρόλο πως τον διαχειρίζεσαι μέσα στην InsertPoint(). Οπότε θεωρητικά, βλέποντας μόνο τη main() σωστό είναι, αλλά πρακτικά πρέπει να συμφωνεί με το πώς τον διαχειρίζεσαι μέσα στην InsertPoint(). Η άσκηση βασικά θέλει να σε υποχρεώσει να περάσεις by reference το head (και όχι το *head) μέσα στην InsertPoint(), για αυτό σε υποχρεώνει να χρησιμοποιήσεις εκείνο το ΑΠΑΡΑΔΕΚΤΟ typedef. Άσε μην αρχίσω πάλι... Α και το >fflush(stdin); που έβαλες τι ακριβώς κάνει? Δες εδώ που το εξηγώ με λεπτομέρεια (μαζί με την malloc() ). ΥΓ. Πες του καθηγητή που σας κάνει C να διαβάσει λίγο το ANSI standard, ειδικά εκεί που λέει για τα declarations των structs με typedef
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.