taslikos Δημοσ. 7 Ιουνίου 2017 Δημοσ. 7 Ιουνίου 2017 καλησπέρα στην κοινοτητα, θα μπορουσε καποιος να μου εξηγησει τον λογο που βγαινει ως εξοδος το 2 σε τουτο τον κωδικα? ποια η χρηση των brackets; int b = 3 ; int main(){ int a=2; int b=-1; { int a=2; a++; b++; } printf("%d",a+; }
kaliakman Δημοσ. 7 Ιουνίου 2017 Δημοσ. 7 Ιουνίου 2017 καλησπέρα στην κοινοτητα, θα μπορουσε καποιος να μου εξηγησει τον λογο που βγαινει ως εξοδος το 2 σε τουτο τον κωδικα? ποια η χρηση των brackets; int b = 3 ; int main(){ int a=2; int b=-1; { int a=2; a++; b++; } printf("%d",a+; } Στις C-family languages όταν γράφεις {..} μπαίνεις σε άλλο scope. Δηλαδή η μεταβλητή a μέσα στις αγκύλες είναι διαφορετική από την μεταβλητή απ' έξω και ταυτόχρονα την "κρύβει"(shadowing) δηλαδή δεν μπορείς να την πειράξεις γιατί μέσα σε αυτό το scope, το α είναι η καινούρια μεταβλητή που όρισες, παράλληλα οι μεταβλητές παύουν να ισχύουν μόλις τελειώσει και το scope. Όσο για το b δεν το ξανά-ορίζεις μέσα στο inner scope όποτε "απευθύνεσαι" στο b που έχεις απ' έξω. Σε συνδυασμό των προηγουμένων το b γίνεται 0 αλλά το α έχει παραμείνει 2 άρα έχεις το αποτέλεσμα που λες. 6
taslikos Δημοσ. 7 Ιουνίου 2017 Μέλος Δημοσ. 7 Ιουνίου 2017 Στις C-family languages όταν γράφεις {..} μπαίνεις σε άλλο scope. Δηλαδή η μεταβλητή a μέσα στις αγκύλες είναι διαφορετική από την μεταβλητή απ' έξω και την ταυτόχρονα την "κρύβει"(shadowing) δηλαδή δεν μπορείς να την πειράξεις γιατί μέσα σε αυτό το scope, το είναι α είναι η καινούρια μεταβλητή που όρισες, παράλληλα οι μεταβλητές παύουν να ισχύουν μόλις τελειώσει και το scope. Όσο για το b δεν το ξανά-ορίζεις μέσα στο inner scope όποτε "απευθύνεσαι" στο b που έχεις απ' έξω. Σε συνδυασμό των προηγουμένων το b γίνεται 0 αλλά το το α έχει παραμείνει 2 άρα έχεις το αποτέλεσμα που λες. καταλαβα!! να σε καλα!! επισης γνωριζεται τον λογο και για αυτο; union tt { int k ; char s[2] ; } m ; int main(void) { if ( sizeof( m ) == sizeof( int ) ) printf( "1" ) ; else printf( "2" ) ; } απο οτι καταλαβα με το union μπορω να δημιουργησω πινακα, και με αριθμους αλλα και λεξεις, το m διπλα του ομως τι συμβολίζει? επίσης η εντολη sizeof επιστρεφει 4 οταν ειναι αριθμος, το m πως γνωριζω τι ειναι; και ισχυει πως sizeof(int)==4; ευχαριστω, συγνωμη αν σας βαζω σε αγγαρια αλλα παρα το γεγονος οτι εχω γνωσεις c αυτα δεν τα εχω συναντησει...
kaliakman Δημοσ. 7 Ιουνίου 2017 Δημοσ. 7 Ιουνίου 2017 καταλαβα!! να σε καλα!! επισης γνωριζεται τον λογο και για αυτο; union tt { int k ; char s[2] ; } m ; int main(void) { if ( sizeof( m ) == sizeof( int ) ) printf( "1" ) ; else printf( "2" ) ; } απο οτι καταλαβα με το union μπορω να δημιουργησω πινακα, και με αριθμους αλλα και λεξεις, το m διπλα του ομως τι συμβολίζει? επίσης η εντολη sizeof επιστρεφει 4 οταν ειναι αριθμος, το m πως γνωριζω τι ειναι; και ισχυει πως sizeof(int)==4; ευχαριστω, συγνωμη αν σας βαζω σε αγγαρια αλλα παρα το γεγονος οτι εχω γνωσεις c αυτα δεν τα εχω συναντησει... Όπως μπορείς να δεις και εδώ:http://www.tutorialspoint.com/cprogramming/c_unions.htm Το m απλά είναι μια μεταβλητή τύπου tt και αυτό που κάνεις είναι ορισμός μιας global. Επίσης το Union έχει το κατάλληλο μέγεθος για να χωρέσει το μεγαλύτερο από τα πεδία του, εδώ έχεις έναν int == 4 bytes ενώ 2 char == 2x1 byte οπότε και το αποτέλεσμα. 1
taslikos Δημοσ. 8 Ιουνίου 2017 Μέλος Δημοσ. 8 Ιουνίου 2017 Άλλη μια ερώτηση: Τι ισχύει σε διπλή ισότητα; δηλαδή: Int x,y; X=y=1; Τι τιμές παίρνουν τα x,y? Επίσης σε αυτήν την περίπτωση: X= (y=3,y+2); Γενικά ποιες οι περιπτώσεις που πρέπει να γνωρίζει κάποιος για τέτοιου είδους;;
kaliakman Δημοσ. 8 Ιουνίου 2017 Δημοσ. 8 Ιουνίου 2017 Άλλη μια ερώτηση: Τι ισχύει σε διπλή ισότητα; δηλαδή: Int x,y; X=y=1; Τι τιμές παίρνουν τα x,y? Επίσης σε αυτήν την περίπτωση: X= (y=3,y+2); Γενικά ποιες οι περιπτώσεις που πρέπει να γνωρίζει κάποιος για τέτοιου είδους;; Multiple assignements: https://stackoverflow.com/questions/19353686/multiple-assignment-in-one-line Comma operator: https://stackoverflow.com/questions/52550/what-does-the-comma-operator-do Και κάτι λίγο γενικότερο που θα σε βοηθήσει ειδικά αν ξεκινάς τώρα. Σε γλώσσες παλαιότερες και εδραιωμένες(και όχι μόνο) υπάρχουν άπειρες ερωτήσεις-απαντήσεις που τις βρίσκεις με ένα απλό search. Το να ξέρεις πως να ψάξεις κάτι είναι από τα καλύτερα εργαλεία για να μάθεις. 1
taslikos Δημοσ. 8 Ιουνίου 2017 Μέλος Δημοσ. 8 Ιουνίου 2017 Multiple assignements: https://stackoverflow.com/questions/19353686/multiple-assignment-in-one-line Comma operator: https://stackoverflow.com/questions/52550/what-does-the-comma-operator-do Και κάτι λίγο γενικότερο που θα σε βοηθήσει ειδικά αν ξεκινάς τώρα. Σε γλώσσες παλαιότερες και εδραιωμένες(και όχι μόνο) υπάρχουν άπειρες ερωτήσεις-απαντήσεις που τις βρίσκεις με ένα απλό search. Το να ξέρεις πως να ψάξεις κάτι είναι από τα καλύτερα εργαλεία για να μάθεις. Σε ευχαριστώ για τον χρόνο σου, εννοείτε πως έψαξα παντού αλλά το λάθος ήταν ότι έψαχνα ως double equality και έβγαζε το γνωστό για σύγκριση αριθμών... ένα τελευταίο που ούτε αυτό δεν συνάντησα κάπου: όταν ορίζω μια μεταβλητή τύπου int χωρίς να της αναθεσω τιμή, μόνη της παίρνει τελικά την τιμή 0 η μια άλλη τυχαία; από ότι έχω καταλάβει γίνεται 0 αλλά θέλω να με επιβεβαιώσει κάποιος. Edit: μετά από ένα πχ που έκανα τελικά επιβεβαιώθηκα πως είναι 0
GReaperEx Δημοσ. 8 Ιουνίου 2017 Δημοσ. 8 Ιουνίου 2017 Edit: μετά από ένα πχ που έκανα τελικά επιβεβαιώθηκα πως είναι 0 Κάνεις εν μέρη λάθος. Είναι 0 μόνο αν η μεταβλητή είναι global, αν είναι local τότε η τιμή της είναι απροσδιόριστη. 1
taslikos Δημοσ. 8 Ιουνίου 2017 Μέλος Δημοσ. 8 Ιουνίου 2017 Κάνεις εν μέρη λάθος. Είναι 0 μόνο αν η μεταβλητή είναι global, αν είναι local τότε η τιμή της είναι απροσδιόριστη.Ευχαριστώ!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα