Μάθημα - Απλά Συνδεδεμένες Λίστες

...ασύγχρονα μαθήματα γλώσσας C

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 07 Ιούλ 2011, 22:02

Κώδικας: Επιλογή όλων
for(i=0; i<1; i++)
{
printf("\n");
list_print(head);
/*Epeidi to au8entiko antigrafo tou head paramenei stin main() prepei na kiniseis pali ton deikti */
}


/*Katastrofi komvou ston opoio deixnei o newnode->next*/
free(newnode);
free(head);

if(newnode&&head==NULL)
printf("H free dn ekane kala tin douleia tis \n");
else
printf("H mnimi eleutherwthike!");


return 0;
}


εκανα αυτες τις αλλαγες... ρε συ εμενα το προγραμμα τωρα μου τρεχει κανονικα... εμφανιζει 12 (κολλημενα βεβαια ακομη και αν βαζω \n \t)
μπορει να κουραζεσαι να λες τα ιδια και τα ιδια αλλα πως θα δω αν ο δεικτης εχει ελευθερωθει??? δεν πρεπει να τον συγκρινω με NULL??? Μετα την free να δω αν εκανε καλα την δουλεια της ??? ενα αυτο.

Μετα που μου λες οτι χανω την επαφη με το loop το καταλαβαινω και εχεις δικιο αλλα θα ηθελα να το φτιαξω απλα να καλει την συναρτηση... τελοςπαντων το εκανα με for και ξεμπερδεψα αν και ο δικος σου τροπος ειναι σιγουρα πιο επαγγελματικος....

Απο την αλλη...... βασικα οκ τωρα καταλαβα

ολη την ζημια την εκανε το head=head->next τωρα με το for πιστευω ειναι ενταξει... η δικη σου γνωμη ποια ειναι?????

Π.Σ Αν αντι για την for εβαζα σκετο while με τον head μεσα μετα απο κατω θα επρεπε καπως να τον μετακινω αλλα μου λες πως χανεται η επαφη με την λιστα..... Δεν κοιταξα αλλο τον δικο σου κωδικα γιατι θελω να καταλαβω μονος μου.... απλα διαβαζω αυτα που γραφεις.

Ευχαριστω

ΣΟρρυ για το πρηξιμο.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 07 Ιούλ 2011, 22:34

Και εκτος απο το παραπανω..... διαβαζα σημερα και για τις βιβλιοθηκες που εχεις πει στις σελιδες 2-3.

Στο ιντερνετ γενικα δεν σου δινουν να καταλαβεις σε ορισμενα ελληνικα αρθρα τα ξενα ειναι καλυτερα ... δεν ξερω τι ακριβως εχουν παθει :S

Αν καταλαβα καλα ουσιαστικα βιβλιοθηκη ειναι το "εκτελεσιμο" ενος header??? δηλαδη εχω μια συναρτηση που υπολογιζει εναν μεσο ορο θα δηλωσω το προτυπο της στο header και οταν μετα μεταγλωτισσω το προγραμματακι (οχι το header) αλλα εκεινο που εχω ορισμενη μεσα την συναρτηση και γινει .o και μετα το φτιαξω σαν βιβλιοθηκη με το ar του gcc θα μπορω αυτο το εκτελεσιμο να το κανω include στον πηγαιο κωδικα ???? ή αυτο το κανει αυτοματα ο linker???? Τελοςπαντων νομιζω πως επιασα την εννοια της βιβλιοθηκης.... ουσιαστικα ειναι εκτελεσιμος κωδικας που χρειαζεται σε ενα αλλο εκτελεσιμο οποτε συνενωνοντε και δημιουργουν το τελικο εκτελεσιμο.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 08 Ιούλ 2011, 11:40

Star_Light έγραψε:
[snip]
εκανα αυτες τις αλλαγες... ρε συ εμενα το προγραμμα τωρα μου τρεχει κανονικα... εμφανιζει 12 (κολλημενα βεβαια ακομη και αν βαζω \n \t)
μπορει να κουραζεσαι να λες τα ιδια και τα ιδια αλλα πως θα δω αν ο δεικτης εχει ελευθερωθει??? δεν πρεπει να τον συγκρινω με NULL??? Μετα την free να δω αν εκανε καλα την δουλεια της ??? ενα αυτο.

Όπως σου είπα κι εγώ αλλά όπως γράφει και η τεκμηρίωση της free() που βρήκες και μου έδειξες, μετά το free() ο δείκτης ΔΕΝ ισούται με NULL, δείχνει σε έναν κατεστραμμένο κόμβο, που εν πολλοίς σημαίνει πως είναι undefined.
Δεν μπορείς να ελέγξεις που δείχνει ο δείκτης μετά το free(). Η γλώσσα όμως σου εγγυάται πως η free() απελευθερώνει ότι της είπες να απελευθερώσει (αν της δώσεις να απελευθερώσει κάτι που δεν υπάρχει, απλά δεν κάνει τίποτα).

έγραψε:Μετα που μου λες οτι χανω την επαφη με το loop το καταλαβαινω και εχεις δικιο αλλα θα ηθελα να το φτιαξω απλα να καλει την συναρτηση... τελοςπαντων το εκανα με for και ξεμπερδεψα αν και ο δικος σου τροπος ειναι σιγουρα πιο επαγγελματικος....

Απο την αλλη...... βασικα οκ τωρα καταλαβα

ολη την ζημια την εκανε το head=head->next τωρα με το for πιστευω ειναι ενταξει... η δικη σου γνωμη ποια ειναι?????

Π.Σ Αν αντι για την for εβαζα σκετο while με τον head μεσα μετα απο κατω θα επρεπε καπως να τον μετακινω αλλα μου λες πως χανεται η επαφη με την λιστα..... Δεν κοιταξα αλλο τον δικο σου κωδικα γιατι θελω να καταλαβω μονος μου.... απλα διαβαζω αυτα που γραφεις.

Ευχαριστω

Δεν κάνει τη διαφορά το νέο for που έβαλες, αλλά το ότι το τύπωμα της λίστας τώρα το κάνεις καλώντας τη συνάρτηση: list_print (που σημαίνει πως επειδή της περνάς το head by value μετακινεί μέσα της ένα αντίγραφο του head και όχι το αυθεντικό που έχουμε ορίσει στη main() ). Πριν έβαζες μέσα στο for το αυθεντικό head για να τυπώσεις τη λίστα και άρα στο τέλος του for ο αυθεντικός head είχε μετακινηθεί στο τέλος της λίστας (και ήταν προφανώς NULL).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 08 Ιούλ 2011, 12:01

Off topic:
Καταρχήν ο λόγος ύπαρξης των βιβλιοθηκών είναι για να μην ξαναγράφεις κώδικα για πράγματα που έχεις ήδη φτιάξει όταν θες να τα χρησιμοποιήσεις και σε άλλα προγράμματα. Τα κάνεις μια (ή περισσότερες) βιβλιοθήκη την οποία μετά την καλείς με το flag: -l στον gcc, ώστε ο linker να την συνδέσει με το καινούριο σου πρόγραμμα (το οποίο χρησιμοποιεί συναρτήσεις της βιβλιοθήκης στον κώδικά του).

Κατά κανόνα μια βιβλιοθήκη εκτός από συναρτήσεις συνήθως χρησιμοποιεί και δικές της δομές δεδομένων, δικά της macros και σταθερές, ακόμα και δικούς της πρόσθετους τύπους δεδομένων, ενίοτε και δικές της καθολικές μεταβλητές. Για να γίνουν όλα αυτά διαθέσιμα μελλοντικά ΚΑΙ σε όποιο πρόγραμμα θελήσει να χρησιμοποιήσει τη βιβλιοθήκη, όλα αυτά ο δημιουργός της βιβλιοθήκης τα ορίζει σε ένα ανεξάρτητο αρχείο .h (header file) το οποίο πρέπει να κάνουν #include όσα προγράμματα θέλουν να χρησιμοποιήσουν τη βιβλιοθήκη.

Άρα λοιπόν, μια ολοκληρωμένη βιβλιοθήκη αποτελείται από το object file της (το .a δηλαδή, αυτό που λες "εκτελέσιμο" αλλά δεν είναι εκτελέσιμο με την κλασική ερμηνεία) συν το header file της ( το .h δηλαδή).

Οπότε, για να χρησιμοποιήσεις αυτή τη βιβλιοθήκη σε ένα πρόγραμμά σου, κάνεις #include το header file της βιβλιοθήκης στον κώδικά σου και μετά στη γραμμή του gcc όταν κάνεις compile, καλείς και το object file της βιβλιοθήκης με το flag -l.

Ένα κλασσικό παράδειγμα των παραπάνω είναι η στάνταρ μαθηματική βιβλιοθήκη της C που έχει σαν object file το: m.a και σαν header file το: math.h
Αν λοιπόν εσύ μέσα σε ένα πρόγραμμά σου θέλεις να χρησιμοποιήσεις συναρτήσεις της μαθηματικής βιβλιοθήκης (π.χ. cos, sin, sqrt, κλπ) τότε στον κώδικα του προγράμματός σου γράφεις:
Κώδικας: Επιλογή όλων
#include <math.h>

κι όταν κάνεις compile τον κώδικά σου κολλάς ένα:
Κώδικας: Επιλογή όλων
gcc ... -lm

στο τέλος της γραμμής.

Star_Light έγραψε:Και εκτος απο το παραπανω..... διαβαζα σημερα και για τις βιβλιοθηκες που εχεις πει στις σελιδες 2-3.

Στο ιντερνετ γενικα δεν σου δινουν να καταλαβεις σε ορισμενα ελληνικα αρθρα τα ξενα ειναι καλυτερα ... δεν ξερω τι ακριβως εχουν παθει :S

Αν καταλαβα καλα ουσιαστικα βιβλιοθηκη ειναι το "εκτελεσιμο" ενος header??? δηλαδη εχω μια συναρτηση που υπολογιζει εναν μεσο ορο θα δηλωσω το προτυπο της στο header και οταν μετα μεταγλωτισσω το προγραμματακι (οχι το header) αλλα εκεινο που εχω ορισμενη μεσα την συναρτηση και γινει .o και μετα το φτιαξω σαν βιβλιοθηκη με το ar του gcc θα μπορω αυτο το εκτελεσιμο να το κανω include στον πηγαιο κωδικα ???? ή αυτο το κανει αυτοματα ο linker???? Τελοςπαντων νομιζω πως επιασα την εννοια της βιβλιοθηκης.... ουσιαστικα ειναι εκτελεσιμος κωδικας που χρειαζεται σε ενα αλλο εκτελεσιμο οποτε συνενωνοντε και δημιουργουν το τελικο εκτελεσιμο.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 08 Ιούλ 2011, 18:15

migf1 έγραψε:
Star_Light έγραψε:
[snip]
εκανα αυτες τις αλλαγες... ρε συ εμενα το προγραμμα τωρα μου τρεχει κανονικα... εμφανιζει 12 (κολλημενα βεβαια ακομη και αν βαζω \n \t)
μπορει να κουραζεσαι να λες τα ιδια και τα ιδια αλλα πως θα δω αν ο δεικτης εχει ελευθερωθει??? δεν πρεπει να τον συγκρινω με NULL??? Μετα την free να δω αν εκανε καλα την δουλεια της ??? ενα αυτο.

Όπως σου είπα κι εγώ αλλά όπως γράφει και η τεκμηρίωση της free() που βρήκες και μου έδειξες, μετά το free() ο δείκτης ΔΕΝ ισούται με NULL, δείχνει σε έναν κατεστραμμένο κόμβο, που εν πολλοίς σημαίνει πως είναι undefined.
Δεν μπορείς να ελέγξεις που δείχνει ο δείκτης μετά το free(). Η γλώσσα όμως σου εγγυάται πως η free() απελευθερώνει ότι της είπες να απελευθερώσει (αν της δώσεις να απελευθερώσει κάτι που δεν υπάρχει, απλά δεν κάνει τίποτα).

έγραψε:Μετα που μου λες οτι χανω την επαφη με το loop το καταλαβαινω και εχεις δικιο αλλα θα ηθελα να το φτιαξω απλα να καλει την συναρτηση... τελοςπαντων το εκανα με for και ξεμπερδεψα αν και ο δικος σου τροπος ειναι σιγουρα πιο επαγγελματικος....

Απο την αλλη...... βασικα οκ τωρα καταλαβα

ολη την ζημια την εκανε το head=head->next τωρα με το for πιστευω ειναι ενταξει... η δικη σου γνωμη ποια ειναι?????

Π.Σ Αν αντι για την for εβαζα σκετο while με τον head μεσα μετα απο κατω θα επρεπε καπως να τον μετακινω αλλα μου λες πως χανεται η επαφη με την λιστα..... Δεν κοιταξα αλλο τον δικο σου κωδικα γιατι θελω να καταλαβω μονος μου.... απλα διαβαζω αυτα που γραφεις.

Ευχαριστω

Δεν κάνει τη διαφορά το νέο for που έβαλες, αλλά το ότι το τύπωμα της λίστας τώρα το κάνεις καλώντας τη συνάρτηση: list_print (που σημαίνει πως επειδή της περνάς το head by value μετακινεί μέσα της ένα αντίγραφο του head και όχι το αυθεντικό που έχουμε ορίσει στη main() ). Πριν έβαζες μέσα στο for το αυθεντικό head για να τυπώσεις τη λίστα και άρα στο τέλος του for ο αυθεντικός head είχε μετακινηθεί στο τέλος της λίστας (και ήταν προφανώς NULL).


Οκ κατάλαβα. Δηλαδη μου λες πως ουσιαστικα ολο αυτο το κομμάτι κώδικα είναι περιττό

Κώδικας: Επιλογή όλων


}

free(one->next); /*Etsi einai to swsto kai oxi opws to eixa anapoda gt einai sfalma */
free(head->next); /* epeidi to head itan hdh katestrameno dn borousa meta na dwsw px */
free(head); /* free(head->next) */

if(head==NULL)
printf("H free dn ekane kala tin douleia tis \n");
else
printf("H mnimi eleutherwthike!");


συνέχισα να το βάζω επειδη και στον προηγούμενο κώδικα που μου είχες διορθώσει (ξερεις εκει που μου διορθωσες την σειρα που εβαζα τα free) δεν ειχες πει κατι για αυτο οποτε θεωρησα πως ειναι ενταξει.... αλλα οκ θα το βγαλω μιας και μου το εξηγησες.

Δηλαδη δεν υπαρχει καποιος τροπος να κάνουμε έλεγχο αν η free απελευθέρωσε κάποιον κόμβο???

Και εχω και μια απορια... μου πεταει warning για implicit declaration στην list_print() και γενικα

Κώδικας: Επιλογή όλων
listes_me_sunarthseis.c:60: warning: conflicting types for ‘list_print’


εδω δεν καταλαβαινω... μπορουμε να επιστρεφουμε void και το όρισμα να ειναι μεσα σε int ας πουμε??? η παράμετροι....

EDIT : Οκ έφταιγε οτι δεν την είχα δηλώσει κατω απο τα headers και πριν την main εφυγαν τα warnings .
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 08 Ιούλ 2011, 18:32

Περιττά δεν είναι τα free(), αλλά το if-else που κάνεις για το head μετά τα free(). Και μάλιστα το if-else δεν είναι μόνο περιττό αλλά ανάλογα τον compiler μπορεί να σου δημιουργήσει και γενικότερο πρόβλημα, γιατί συγκρίνεις με το NULL έναν δείκτη που δείχνει σε κάτι UNDEFINED!

Όσο για το warning, το implicit declaration συνήθως σημαίνει πως κάπου χρησιμοποιείς τη list_print() πριν την δηλώσεις. Για να χρησιμοποιήσεις μια συνάρτηση πρέπει πρώτα να γράψεις τον κώδικά της και μετά να την καλέσεις ή έστω να υπάρχει κάπου γραμμένο το πρότυπό της πριν την καλεσεις.

Το conflicting types συνήθως σημαίνει πως την έχεις διπλοδηλώμένη την list_print, το οποίο συνήθως σημαίνει με τη σειρά του πως σε μια από τις 2 δηλώσεις την έχεις δηλώσει με διαφορετικά ορίσματα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 08 Ιούλ 2011, 18:38

migf1 έγραψε:Καλημέρα παιδιά, 1000 ευχαριστώ για τα καλά σας λόγια. Είναι χαρά μου να βοηθάω όπου μπορώ.

Φίλε Strarlight, ο κώδικάς σου έχει προβληματάκια:

.......

4. Μετά την απελευθέρωση των κόμβων έχεις μια συνθήκη if-else προκειμένου να ελέγξεις αν πέτυχε η απελευθέρωση μνήμης....

Κώδικας: Επιλογή όλων

if (head->id) // <-- λάθος
printf("H free dn ekane kala tin douleia tis \n");
else
printf("H mnimi eleutherwthike!");

Εδώ υπάρχουν 2 προβλήματα, το σοβαρότερο εκ των οποίων είναι πως και πάλι προσπαθείς να χρησιμοποιήσεις έναν κατεστραμμένο κόμβο (από το προηγούμενο free) και συγκεκριμένα προσπαθείς να χρησιμοποιήσεις το πεδίο: id του κατεστραμμένου κόμβου (head->id). Το επόμενο πρόβλημα είναι πως το πεδίο id είναι τύπου int, οπότε ακόμα και αν ο κόμβος head υπήρχε, η συνθήκη: if ( head->id ) συγκρίνει την int τιμή του id με το 0 για να αποφασίσει αν απελευθερώθηκε ή όχι η μνήμη;

Υποθέτω πως εννοούσες: if (head == NULL). Πάντως δεν είναι καλή ιδέα να συγκρίνεις τον δείκτη ενός κόμβου που έχεις ήδη καταστρέψει με το free(). Προφανώς ούτε να τον χρησιμοποιείς. Για να τον ξαναχρησιμοποιήσει ως κόμβο θα πρέπει να κάνεις εκ νέου malloc()/calloc().

Να πω και κάτι τελευταίο, που έχω την εντύπωση πως δεν έχεις ξεκαθαρίσει στο μυαλό σου. Μπορεί να κάνω και λάθος, αλλά θα το πω καλού-κακού μιας και το φόρουμ το διαβάζει πολύς κόσμος.

Έχει να κάνει με τον συμβολισμό -> για πρόσβαση στα πεδία μιας μεταβλητής που είναι τύπου struct. Ο κανονικός συμβολισμός για να αναφερθούμε σε ένα πεδίο μιας μεταβλητής τύπου struct είναι η τελεία (.).



Οπα ψεμματα. Μου το ειχες τονισει!

Π.Σ Ναι μπερδευτηκα - απο κεκτιμενη ταχυτητα τα free φυσικα και δεν ειναι περιττα!!!!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 08 Ιούλ 2011, 18:47

ποια η διαφορά του NULL με το UNDEFINED????? :/
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 08 Ιούλ 2011, 19:01

Off topic:
Σχετικα με τις βιβλιοθήκες τωρα οταν λες αντικειμενικο αρχείο object εννοεις αρχειο πηγαιου κωδικα που ειναι μεταφρασμενο σε γλώσσα μηχανης??? Και ως εκει. Μετα με τον συνδετη θα μπουν ας πουμε οι βιβλιοθηκες ωστε να παραχθει το εκτελέσιμο. Η διαφορα ενος μεταγλωττιστη με ενος απλου διερμηνέα πχ της PHP ειναι οτι στους μεν δευτερους επειδη δεν δημιουργουν αντικειμενικα αρχεια θα πρεπει να τους καλεις οποτε θες να τρέξεις το προγραμμα ?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 08 Ιούλ 2011, 19:02

No problem ρε συ, κατανοώ απόλυτα πως προσπαθείς να αφομοιώσεις πάρα πολλές πληροφορίες σε πολύ λίγο χρόνο!

Σχετικά με το NULL, είναι κανονική σταθερά (ορισμένη με #define μέσα στο stdio.h και στο stdef.h) και αποτελεί ειδική περίπτωση για δείκτες που θέλουμε ΕΜΕΙΣ να τους αρχικοποιήσουμε στο κενό πριν τους βάλουμε να δείχνουν σε μια malloc'ed περιοχή της μνήμης. Το NULL συνήθως είναι ορισμένο ως: 0L ή ως (void *)0

Undefined από την άλλη μεριά, εννοούμε "άγνωστο", "ανεξιχνίαστο", "αμφιβόλου περιεχομένου", κλπ και δεν είναι κάποια σταθερά που χρησιμοποιεί η γλώσσα. Έκφραση που χρησιμοποιούμε στον λόγο μας είναι.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Μαθήματα C