ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

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

ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό linuxs » 20 Μαρ 2011, 00:57

Κεφάλαιο 3 - Μεταβλητές & Σταθερές

...τι περιέχει αυτό το κεφάλαιο:
Στο κεφάλαιο αυτό θα δούμε κάποιες βασικές έννοιες περί τί είναι μια μεταβλητή και τι μια σταθερά! Ποιές οι διαφορές τους και πότε χρησιμοποιούνται. Επίσης θα μιλήσουμε και λίγο για την εντολή εκχώρησης και για τα σχόλια που μπορούμε να βάλουμε στο πρόγραμμά μας!


Μεταβλητές
Όσο θα διαβάζετε τα παρακάτω νομίζω πως είναι χρήσιμο να έχετε στο μυαλό σας πως οι μεταβλητές και οι σταθερές είναι απλά κουτάκια και τίποτα άλλο. Τις μεταβλητές θα τις βρείτε "σε κάθε πρόγραμμα" και για να είμαι ειλικρινής σε κάθε γλώσσα προγραμματισμού. Οι μεταβλητές διαθέτουν θέσεις μνήμης του υπολογιστή μας, οι οποίες όπως λέει και το όνομά τους μπορούν να αλλάζουν τιμή μέσα στο πρόγραμμα. Αυτό βέβαια δεν είναι πάντα χρήσιμο γι' αυτό υπάρχει και η άλλη κατηγορία των σταθερών που θα δούμε παρακάτω. Οι μεταβλητές συνήθως συμβολίζονται με λατινικά γράμματα πχ. x, y, z κτλ αλλά μπορείτε να δώσετε οποιοδήποτε άλλο όνομα θέλετε αρκεί να μην είναι δεσμευμένο με τα ονόματα εντολών της C. Καλό είναι να παίρνουν ένα αντιπροσωπευτικό όνομα και όχι τυχαίο, όπως μεταβλητή1, μεταβλητή2 κτλ. Έτσι, θα είναι πιο ευδιάκριτο το συνολικό πρόγραμμα και θα μπορείτε να το διαχειρίζεστε καλύτερα κάτι που είναι φοβερά χρήσιμο! Η ιδιότητα που έχουν είναι πως σε όλο το πρόγραμμα απο την αρχή μέχρι το τέλος μπορούν να παίρνουν διάφορες τιμές. Μια μεταβλητή κρατάει την τιμή της μέχρι να πάρει μια καινούρια τιμή η να καταστραφεί ο χώρος που τη περιέχει. Δηλαδή, αν υποθέσουμε πως μια μεταβλητή είναι ένα κουτί που έχει ακέραιο τότε μπορεί στην αρχή να ισούτε με 3 και μετά να προσθέσουμε 2 και να γίνει ίση με 5. Αυτό ΔΕΝ γίνεται με τις σταθερές!
Σημαντικό έγραψε:Οι μεταβλητές είναι κουτάκια που μπορούν να αλλαξουν τιμή κατά την διάρκεια του προγράμματος μας.

Για να πάρει μια μεταβλητή τιμή, θα πρέπει να την αναθέσουμε σε αυτή και αυτό συνήθως γίνεται με μια εντολή ανάθεσης που στην C είναι το '='. Συγκεκριμένα μια εντολή ανάθεσης έχει δυο μέρη. Το μπροστά μέρος που είναι η μεταβλητή στην οποία θα αναθέσουμε την τιμή και το πίσω μέρος που είναι η παράσταση την οποία συνήθως την υπολογίζουμε και την εκχωρούμε στην μεταβλητή. Πραδείγματα, εντολής - ανάθεσης είναι τα παρακάτω,
Κώδικας: Επιλογή όλων
x = 13; /* το 13 εκχωρείτε στο κουτί ονόματι x */
y = (3+5) / 2; /* υπολογίζουμε την παράσταση (3+5) / 2 και το αποτέλεσμα εκχωρείτε στο κουτί y */
x = (x+4) – y; /* υπολογίζουμε την παράσταση (x+4) – y και το αποτέλεσμα εκχωρείτε στο κουτί y */
z = (4+5-567.1)^2 /* υπολογίζουμε την παράσταση (4+5-567.1)^2 και το αποτέλεσμα εκχωρείτε στο κουτί y */
κ.ο.κ.


Είναι σημαντικό να παρατηρήσετε πως στο πρώτο μέρος υπάρχει μια μόνο μεταβλητή και δεν επιτρέπεται να κάνουμε κάποια πράξη όπως,
Κώδικας: Επιλογή όλων
x+y=32;


Αν γίνει αυτό ο compiler για ακόμη μια φορά θα χτυπήσει!
Μια μεταβητή όπως η x για παράδειγμα μπορεί να πάρει μια τιμή και αργότερα να πάρει μια άλλη. Αυτή η ιδιότητα είναι επιτρεπτή στις μεταβλητές μόνο και ουσιαστικά αυτός είναι ο κύριος λόγος που ξεχωρίζουν απο τις σταθερές. Δηλαδή,
Κώδικας: Επιλογή όλων
    χ = 12;
    χ = 43;
    χ = 54;

Η τελική τιμή του x είναι 54, όπως φαίνεται παραπάνω. Αυτό μπορείτε να το φανταστείτε ως εξής: Το x είναι ένα κουτάκι που αποθηκεύουμε την τιμή 12, μετά σβήνουμε το 12 και αποθηκεύουμε το 43 και τέλος σβήνουμε το 43 και τοποθετούμε με ανάλογο τρόπο το 54.


Σταθερές
Οι σταθερές απο την άλλη, είναι αμετάβλητες σε όλο το πρόγραμμά μας οπότε αρκεί μόνο μία εντολή ανάθεσης(συνήθως στην αρχή του προγράμματος) και απο κεί και πέρα η τιμή αυτή ισχύει για όλο το πρόγραμμα. Σε περίπτωση που καταλάθως προσπαθήσουμε να ξανα-εκχωρίζουμε πάλι μια τιμή θα έχουμε κάποιο error και θα χτυπήσει ο compiler. Είναι συνήθως λίγες σε ένα μικρό πρόγραμμα διατηρούν την τιμή που περιέχουν απο την αρχή μέχρι το τέλος. Συνήθως, τις χρησιμοποιούμε για να ορίζουμε στατικούς πίνακες, μιας και το μέγεθος ενός στατικού πίνακα είναι ανέπαφο σε όλο το πρόγραμμα. Για ακόμη μια φορά, καλό είναι να παίρνουν ένα αντιπροσωπευτικό όνομα και όχι τυχαίο όπως σταθερά1, σταθερά2, κτλ. για τους ίδιους περίπου λόγους που αναφέρθηκαν και παραπάνω! Δηλαδή, αν ορίσουμε μια σταθερά x ίση με 5 θα είναι ίση με 5 σε όλο το πρόγραμμα και νομίζω πως αν προσπαθήσουμε να προσθέσουμε 2 στην σταθερά να μας χτυπήσει ο compiler για error! Για να ορίσουμε μια σταθερά χρησιμοποιούμε την εντολή
Κώδικας: Επιλογή όλων
    #define <σταθερά>

και συνήθως όλες οι δηλώσεις σταθερών αναγράφονται ακριβώς μετά τις βιβλιοθήκες στην αρχή που προγράμματος μας. Προσέξτε πως δεν χρησιμοποιείται κάποιο = η οτιδήποτε άλλο και ΔΕΝ υπάρχει το ερωτηματικό στο τέλος!.
Σημαντικό έγραψε: Οι σταθερές είναι ανέπαφες σε όλο το πρόγραμμα και δεν αλλάζουν την αρχική τιμή τους.


Ένα παράδειγμα είναι το παρακάτω(έστω πως υπάρχουν και δυο βιβλιοθήκες),
Κώδικας: Επιλογή όλων
#include <stdio.h>
    #include <stdlib.h>

    #define n 5
    #define k 123
    #define A 8

Μετά απο την παραπάνω δήλωση κάποια πράξη σαν
Κώδικας: Επιλογή όλων
n = n+5;
n = k+k;
A = 3;

είναι λαθος και θα χρυπήσουν στο compiler! ;)

Εντολή Εκχώρησης
Λογικά θα το γνωρίζετε και απο τα μαθηματικά οπότε είναι ένα κομμάτι που απλά μια ανάγνωση θα το περάσετε. Καλό όμως είναι να υπάρχει και να το διαβάσετε με όση περισσότερη προσοχή έχετε! -όχι επειδή το έγγραψα εγώ αλλά επειδή πολλές φορές τα λάθη είναι οι λεπτομέριες-
Η εντολή εκχώρησης στην C μας επιτρέπει να εκχωρήσουμε μια τιμή σε μια μεταβλητή και ποτέ σε μια σταθερά. Η εντολή αυτή είναι κλασικά το "=". Και χρησιμοποιείτε ως εξής:
Κώδικας: Επιλογή όλων
<μεταβλητή> = <τιμή_εκχώρησης>


Αυτό που κάνει το παραπάνω είναι να εκχωρεί μια τιμή πχ. 4 στο κουτάκι με όνομα <μεταβλητή>. Η μεταβλητή μας μπορεί να είναι ακέραια, χαρακτήρας η ακόμη και πινακας!
Η τιμή_εκχώρησης με την μεταβλητή θα πρέπει να είναι ΙΔΙΟΥ ΤΥΠΟΥ

Με άλλα λόγια δεν μπορούμε να εκχωρήσουμε σε μια μεταβλητή τύπου int(ακέραιος) το όνομά μας!!! Προσοχή σε αυτό έτσι? Είναι πολύ συχνό λάθος...

Σχόλια
Δεν έχω να πώ πολλά εδώ απλά να αναφέρω τον τρόπο που μπορείτε να βάλετε σχόλια στο πρόγραμμά σας. Τα σχόλια είναι λέξεις-προτάσει που τα βάζετε ΟΠΟΥ ΘΕΛΕΤΕ ΕΣΕΙΣ και αυτό που κάνουν είναι να σας διευκολύνουν να το διαβάζετε καλύτερα! Τίποτα άλλο. Εάν δεν θέλετε μπορείτε να μην βάλετε καθόλου και το "σωστό" αυτό είναι σε προγράμματα 10-15 γραμμών. Οκ! Ίσως δεν είναι το σωστό αλλα δεν θα υπάρξει απολύτως κανένα πρόβλημα. Όταν όμως με το καλό φτάσετε σε επίπεδο να γράφετε 100-200-300 κοκ γραμμές κώδικα, ΧΩΡΙΣ σχόλια είναι ένα χάλι. Πραγματικά! :( Ένας άλλος λόγος για να βάζετε σχόλια είναι για να διευκολίνετε όχι μόνο τον εαυτό σας αλλα και τους άλλους που μπορεί κάποια στιμγή να διαβάσουνε τον κώδικά σας. Κάντε τον λοιπόν συντηρήσιμο! ;) Τα σχόλια μπορουν να είναι σε ελληνικά -αγγλικά greeklish και σε ότι άλλη γλώσσα θέλετε. Δεν τον ενδιαφέρει τον compiler γιατί πολύ απλά τα διαγράφει μόλις πατήσετε "gcc αρχείο.c". Δεν τα διαγράφει μόνιμα μην φοβάστε! ;) Απλά τα αγγνοεί. Πως μπαίνουν τα σχόλια? απλό...
Κώδικας: Επιλογή όλων
/* σχόλιααα */

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


Υπάρχουν δύο ειδών! Τα πρώτα είναι όταν θέλετε να βάλετε ένα μεγάλο κομμάτι σε σχόλια. πχ. μια παράγραφο ολόκληρη! ;) Και το δεύτερο είναι μόνο για μια γραμμή. Δηλαδή ότι βρίσκεται στην ίδια γραμμή με το // είναι σε σχόλιο. Τα παραπάνω και παρακάτω κώδικας! ;) Εμένα με βολεύουν τα πρώτα... :D
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

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

Και ποιος ο λόγος να μην κάνω μια μεταβλητή αντί μιας σταθεράς και απλά να μην την αλλάξω;
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: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

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

Καταρχήν θα πρέπει να είναι global. Δεύτερον, σκέψου λίγο γιατί να χρησιμοποιήσεις μεταβλητή(μ-ε-τ-α-β-λ-η-τ-ή) και να την κρατήσεις σταθερή? δεν υπάρχει λόγος... :/ Εγώ ποτέ δεν σκέφτηκα αυτή την απορία πάντως... ίσως αν κάποιο α΄λλο παιδί γνωρίζει περισσότερα μας διαφωτίσει πιο πολύ...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό Qdata » 20 Ιουν 2011, 18:03

stamatiou έγραψε:Και ποιος ο λόγος να μην κάνω μια μεταβλητή αντί μιας σταθεράς και απλά να μην την αλλάξω;


Δες την απάντηση μου εδώ: viewtopic.php?f=6&t=19030&p=193236#p193239
Με την σταθερά ορίζεις κάτι το δεδομένο!Πχ στα μαθηματικά το γράμμα "π" είναι ένας αριθμός ο οποίος ποτέ δεν αλλάζει.Οπότε αν χρειάζεται να χρησιμοποιήσεις σε ένα πρόγραμμα τον αριθμό "π" (πχ να υπολογίζεις εμβαδόν κύκλου) θα πρέπει να το δηλώσεις ως σταθερά με την εντολή:

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


Έτσι οπουδήποτε και να γράψεις PI θα αντικατασταθεί από τον compiler από την τιμή της σταθεράς!Οι μεταβλητές είναι τοπικές και ισχύουν μόνο για την συνάρτηση στην οποία ανήκουν!Πάρε παράδειγμα τα προβλήματα:
Σε ένα πρόβλημα έχουμε τα δεδομένα και ,τα άγνωστα(ζητούμενα).Όταν επιχειρήσεις να λύσεις ένα τέτοιο πρόβλημα σε C θα δηλώσεις τα δεδομένα, που δεν πρόκειται να αλλάξουν, ως σταθερές και στη συνέχεια μπορείς να δηλώσεις τα άγνωστα ως μεταβλητές!Πιστεύω να σε κάλυψα! :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

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

Qdata έγραψε:
stamatiou έγραψε:Και ποιος ο λόγος να μην κάνω μια μεταβλητή αντί μιας σταθεράς και απλά να μην την αλλάξω;


Δες την απάντηση μου εδώ: viewtopic.php?f=6&t=19030&p=193236#p193239
Με την σταθερά ορίζεις κάτι το δεδομένο!Πχ στα μαθηματικά το γράμμα "π" είναι ένας αριθμός ο οποίος ποτέ δεν αλλάζει.Οπότε αν χρειάζεται να χρησιμοποιήσεις σε ένα πρόγραμμα τον αριθμό "π" (πχ να υπολογίζεις εμβαδόν κύκλου) θα πρέπει να το δηλώσεις ως σταθερά με την εντολή:

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


Έτσι οπουδήποτε και να γράψεις PI θα αντικατασταθεί από τον compiler από την τιμή της σταθεράς!Οι μεταβλητές είναι τοπικές και ισχύουν μόνο για την συνάρτηση στην οποία ανήκουν!Πάρε παράδειγμα τα προβλήματα:
Σε ένα πρόβλημα έχουμε τα δεδομένα και ,τα άγνωστα(ζητούμενα).Όταν επιχειρήσεις να λύσεις ένα τέτοιο πρόβλημα σε C θα δηλώσεις τα δεδομένα, που δεν πρόκειται να αλλάξουν, ως σταθερές και στη συνέχεια μπορείς να δηλώσεις τα άγνωστα ως μεταβλητές!Πιστεύω να σε κάλυψα! :)

Δηλαδή είναι σαν τα global variables στην Python;
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: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό Qdata » 20 Ιουν 2011, 19:00

stamatiou έγραψε:Δηλαδή είναι σαν τα global variables στην Python;


Ναι, με την μόνη διαφορά ότι στη python θα γράψεις ένα πρόγραμμα έτσι:
Κώδικας: Επιλογή όλων
#!/usr/bin/python3
PI = 3.14
def envC():
    global PI
    print("Το π είναι: {0}".format(PI))
envC()


Ενώ στη C:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#define PI 3.14

main()
{
   fuction1();
}
fuction1()
{
   printf("Το π είναι: %d\n", PI);
}


Για την C: Δηλαδή αφού δηλώσεις μόνο στην αρχή-αρχή ότι το PI είναι σταθερά δεν χρειάζεται να κάνεις καμία απολύτως άλλη δήλωση στο πρόγραμμά σου! :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

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

Αυτά είναι! ;) Όταν ξέρεις κα τις δύο γλώσσες... ;Ο
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό g1wrg0s » 24 Ιουν 2012, 11:54

stamatiou έγραψε:Και ποιος ο λόγος να μην κάνω μια μεταβλητή αντί μιας σταθεράς και απλά να μην την αλλάξω;


Επισης εχω την εντυπωση οτι εαν καποιος χρησιμοποιησει μια μεταβλητη εναντι μιας σταθερας και οντως μεσα στο προγραμμα του δεν την αλλαζει , π.χ int x=2; αντι του #define x 2 τοτε μπορει να ειναι σιγουρος (?) οτι αυτος ουτε στο μελλον δεν θα την αλλαξει τη μεταβλητη, αλλα δεν μπορει να ειναι σιγουρος οτι κι ενας τριτος δεν θα την αλλαξει (π.χ σε μια συντηρηση του προγραμματος).
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Πρώτα βήματα
2 Ubuntu 12.10 quantal 3.10.20-031020-generic 32bit (el_GR.UTF-8, Unity ubuntu), Windows 8
3 Intel Core i5-3230M CPU @ 2.60GHz ‖ RAM 7923 MiB ‖ Acer VA50_HC_CR - Acer Aspire V3-571G
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915} ⋮ nVidia Device [10de:0fe1] {}
5 eth0: Broadcom NetLink BCM57785 Gigabit Ethernet PCIe [14e4:16b5] (rev 10) ⋮ wlan0: Atheros Inc. AR9462 Wireless Network Adapter [168c:0034] (rev 01)
g1wrg0s
punkTUX
punkTUX
 
Δημοσιεύσεις: 196
Εγγραφή: 26 Μάιος 2012, 10:29
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό poscore » 28 Ιουν 2012, 13:17

g1wrg0s έγραψε:Επισης εχω την εντυπωση οτι εαν καποιος χρησιμοποιησει μια μεταβλητη εναντι μιας σταθερας και οντως μεσα στο προγραμμα του δεν την αλλαζει , π.χ int x=2; αντι του #define x 2 τοτε μπορει να ειναι σιγουρος (?) οτι αυτος ουτε στο μελλον δεν θα την αλλαξει τη μεταβλητη, αλλα δεν μπορει να ειναι σιγουρος οτι κι ενας τριτος δεν θα την αλλαξει (π.χ σε μια συντηρηση του προγραμματος).


Σωστό!
Άβαταρ μέλους
poscore
punkTUX
punkTUX
 
Δημοσιεύσεις: 153
Εγγραφή: 28 Απρ 2012, 17:21
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 3 - ΜΕΤΑΒΛΗΤΕΣ & ΣΤΑΘΕΡΕΣ

Δημοσίευσηαπό migf1 » 28 Ιουν 2012, 20:53

Επίσης να συμπληρώσω πως από C99 και μετά μπορούμε να ορίζουμε σταθερές και με το πρόθεμα const.

Π.χ....

Μορφοποιημένος Κώδικας: Επιλογή όλων
int main( void )
{
const int MAX= 10; // το MAX είναι μια σταθερά
}


Μια βασική διαφορά όμως μεταξύ #define και const είναι πως στην 2η περίπτωση η σταθερά δεν μπορεί να χρησιμοποιηθεί για τον ορισμό πίνακα.

Δηλαδή...

Μορφοποιημένος Κώδικας: Επιλογή όλων
int main( void )
{
const int MAX = 10; // το MAΧ είναι μια σταθερά
int array[ MAX ] = {0}; // <------ δίνει σφάλμα
}


πρέπει...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#define MAX  10   // το MAX είναι μια σταθερά

int main( void )
{
int array[ MAX ] = {0}; // <------ κανένα πρόβλημα
}
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Επόμενο

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