Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπέρα στην κοινοτητα,

 

θα μπορουσε καποιος να μου εξηγησει τον λογο που βγαινει ως εξοδος το 2 σε τουτο τον κωδικα?

ποια η χρηση των brackets;

int b = 3 ;
int main(){
  int a=2;
  int b=-1;
  {
    int a=2;
    a++;
    b++;
  }
  printf("%d",a+;
}
Δημοσ.

 

καλησπέρα στην κοινοτητα,

 

θα μπορουσε καποιος να μου εξηγησει τον λογο που βγαινει ως εξοδος το 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 άρα έχεις το αποτέλεσμα που λες.

  • Like 6
Δημοσ.

Στις 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 αυτα δεν τα εχω συναντησει...

Δημοσ.

καταλαβα!! να σε καλα!!

επισης γνωριζεται τον λογο και για αυτο;

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 οπότε και το αποτέλεσμα.

  • Like 1
Δημοσ.

Άλλη μια ερώτηση:

 

Τι ισχύει σε διπλή ισότητα; δηλαδή:

 

Int x,y;

X=y=1;

Τι τιμές παίρνουν τα x,y?

 

Επίσης σε αυτήν την περίπτωση:

 

X= (y=3,y+2);

 

Γενικά ποιες οι περιπτώσεις που πρέπει να γνωρίζει κάποιος για τέτοιου είδους;;

Δημοσ.

Άλλη μια ερώτηση:

 

Τι ισχύει σε διπλή ισότητα; δηλαδή:

 

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. Το να ξέρεις πως να ψάξεις κάτι είναι από τα καλύτερα εργαλεία για να μάθεις.

  • Like 1
Δημοσ.

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

Δημοσ.

Edit: μετά από ένα πχ που έκανα τελικά επιβεβαιώθηκα πως είναι 0

 

Κάνεις εν μέρη λάθος. Είναι 0 μόνο αν η μεταβλητή είναι global, αν είναι local τότε η τιμή της είναι απροσδιόριστη.

  • Like 1
Δημοσ.

Κάνεις εν μέρη λάθος. Είναι 0 μόνο αν η μεταβλητή είναι global, αν είναι local τότε η τιμή της είναι απροσδιόριστη.

Ευχαριστώ!!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...