ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

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

Re: ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 15:38

Ναι, αναλύουμε λεπτομέρειες της λεπτομέρειας τώρα, αλλά το κάνω επειδή το τόπικ το διαβάζουν κυρίως παιδιά που τώρα ξεκινάνε με τη C, οπότε ίσως τους βοηθήσει καλύτερα ;)

Σε γενικές γραμμές, όταν λέμε "string" στη C εννοούμε μονοδιάστατο πίνακα χαρακτήρων με τον τελικό να ισούται με '\0'. Οπότε, το όνομα stringtable νοηματικά παραπέμπει σε "table of string" που με τη σειρά του σημαίνει δυσδιάστατος πίνακας χαρακτήρων :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

Δημοσίευσηαπό stamatiou » 20 Ιουν 2011, 16:38

clepto έγραψε:&number μπορείς να μου εξηγήσεις κιόλας;

Γεια σας, και εγώ αρχάριος είμαι στη C. Από ό,τι ξέρω, όταν βάζεις μπροστά από μεταβλητή & ή * είναι pointer, ή αλλιώς δείκτης. Τωρα γιατί χρειάζεται δείκτη δεν ξερω...
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

Δημοσίευσηαπό linuxs » 20 Ιουν 2011, 16:54

το & δηλώνει διεύθυνση βασικά...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

Δημοσίευσηαπό pr0n » 08 Αύγ 2011, 23:08

clepto έγραψε:&number μπορείς να μου εξηγήσεις κιόλας;


είναι επειδή το scanf λειτουργεί ως pointer...
κάπου πρέπει να γίνει αποθήκευση των δεδομένων που δίνεις....αυτό γίνεται παρέχοντας τις διευθύνσεις των περιοχών που αποθηκεύονται τα δεδομένα..
γι αυτό χρειάζεται το & στην ουσία σημαίνει "επέστρεψε την διεύθυνση που είναι αποθηκευμένο το εν λόγω δεδομένο"..

πιστεύω να το κατάλαβες έτσι όπως το εξήγησα..
Εικόνα
"I recommend Ubuntu" - Bill Gates

Spoiler: show
1 Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Λειτουργικά → Ubuntu 11.04 natty 32bit (en_US.UTF-8), Ubuntu 2.6.38-8-generic
3 Προδιαγραφές → Intel Pentium 4 CPU 3.06GHz ‖ RAM 496 MiB ‖ SiS-648FX -
4 Κάρτες γραφικών: nVidia NV34 [GeForce FX 5200] [10de:0322] (rev a1)
5 Δίκτυα: eth0: SiS SiS900 PCI Fast Ethernet [1039:0900] (rev 91)
Άβαταρ μέλους
pr0n
babeTUX
babeTUX
 
Δημοσιεύσεις: 10
Εγγραφή: 07 Αύγ 2011, 18:23
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 4 - ΕΝΤΟΛΕΣ ΣΥΝΘΗΚΗΣ & ΕΠΑΝΑΛΗΨΗΣ

Δημοσίευσηαπό Star_Light » 09 Αύγ 2011, 01:56

αν και ο σταματίου έχει αρχισει να γίνεται αετός θα δωσω και εγω την μνεία μου μπας και οφεληθει
καποιος καινουργιος συναδελφος μας στην C.

Οταν δηλώνεις μεταβλητές με την => τυπος_δεδομενων ονομα_μεταβλητης ;

Για παράδειγμα

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


int x; // δηλωση ακεραιης μεταβλητης με ονομα x


το int ειναι δεσμευμένη λέξη για ακέραιους τυπους στην C. Οταν λοιπον κάνεις την παραπάνω δήλωση ουσιαστικα λες στον μεταγλωτιστη να σου δεσμευσει μνημη ιση με το μεγεθος του τυπου δεδομενων που θα χρησιμοποιησεις. ΣΤην προκειμενη περιπτωση ιση με εναν integer θα ειναι η μνήμη που θα δεσμευτει. Επομενως σε αυτο το σημειο λεμε πως "το x πλεον έχει μια αριστερή τιμή" γενικα καθε μεταβλητη έχει 2 τιμές μια αριστερή και μια δεξια και η βασικη διαφορα με τους δεικτες ειναι πως και οι 2 τους τιμες (αριστερη/δεξια αποτελουν διευθυνσεις!!!)... η δεξιά σε μια κανονικη μεταβλητη τωρα δίνεται με τον τελεστη εκχώρησης ''='' και αποτελει την πραγματικη τιμη της μεταβλητης ενω η αριστερη τιμή δίνεται αμεσως μολις δηλώσεις την μεταβλητή σου. Αν δεν αρχικοποιήσεις την μεταβλητη εξαρχης δεν υπαρχει προβλημα... αν δεν την δηλωσεις καθολου ομως και πας να την χρησιμοποιησεις μετα υπάρχει. Ο μεταγλωττιστης θα σου κτυπησει.

Επομενως υπάρχει μια διευθυνση στην μνήμη για την μεταβλητη που έχει δηλωθει και σε αυτην ακριβως την διευθυνση μνημης θα αποθηκευτεί μεσω της scanf αυτο που θα δώσει ο χρήστης μετα το μηνυμα απο μια printf.

Για παραδειγμα =>

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


int x;

printf("Dwste to x: \n");
scanf("%d",&x); //αυτο που δίνεις ειναι %d => ακέραιος και θα αποθηκευτει
// στην διευθυνση μνημης που έχει δεσμευτει για το x οταν το δηλωνες.

Γνώσεις ⇛ 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
Εκτύπωση

Προηγούμενη

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