Γιατί δεν `δείκτη = δείκτης ++` `αύξηση index`;

ψήφοι
0

** Dup: Ποια είναι η διαφορά μεταξύ του Χ = Χ ++? vs X ++ ;? **

Έτσι, ακόμα κι αν ξέρω ότι ποτέ δεν θα το κάνουμε πραγματικότητα αυτό στον κώδικα, είμαι ακόμα περίεργος:

public static void main(String[] args) {
    int index = 0;
    System.out.println(index);   // 0
    index++;
    System.out.println(index);   // 1
    index = index++;
    System.out.println(index);   // 1
    System.out.println(index++); // 1
    System.out.println(index);   // 2
}

Να σημειωθεί ότι η 3η sysoutεξακολουθεί να είναι 1. Στο μυαλό μου η γραμμή index = index++;σημαίνει «που του δείκτη στο δείκτη, τότε αυξάνει δείκτη κατά 1» με τον ίδιο τρόπο System.out.println(index++);σημαίνει «περάσει ευρετήριο του println μέθοδο στη συνέχεια αύξηση του δείκτη κατά 1».

Αυτό δεν συμβαίνει όμως. Μπορεί κανείς να εξηγήσει τι συμβαίνει;

Δημοσιεύθηκε 09/12/2008 στις 23:00
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
4

Αυτό είναι ένα αντίγραφο ερώτηση.

EDIT: Δεν μπορώ να βρώ το πρωτότυπο: P μα καλά

α = a ++ χρησιμοποιεί το postincrement, η οποία compiler σας ερμηνεύει ως εξής:

a = function() {
   var old_value = a;
   a++;
   return old_value;
}

EDIT 2: Ποια είναι η διαφορά μεταξύ του Χ = Χ ++? vs X ++ ;?

Απαντήθηκε 09/12/2008 στις 23:01
πηγή χρήστη

ψήφοι
3

value++; είναι μετά την αύξηση.

int firtValue = 9;
int secondValue = firstValue++;

firstValue είναι τώρα 10, αλλά secondValue είναι 9, η αξία των firstValue πριν από αυξάνεται.

Τώρα με προ-αύξηση:

int firtValue = 9;
int secondValue = ++firstValue;

firstValue και secondValue είναι τώρα 10, fistValue αυξάνεται και, στη συνέχεια, η τιμή του asigned να secondValue.

Απαντήθηκε 09/12/2008 στις 23:04
πηγή χρήστη

ψήφοι
1

Δεν έχω δοκιμάσει κάτι τέτοιο, αλλά είμαι πρόθυμος να είναι ότι η ανάθεση γίνεται μετά την αύξηση.

Έτσι, αυτό που συμβαίνει στην πραγματικότητα σε ό, τι αφορά το compiler είναι:

  1. αξιολογούν δείκτη
  2. Κρατήστε την τιμή του δείκτη για αργότερα
  3. Αυξήσετε την τιμή του δείκτη
  4. Αναθέστε την παλιά τιμή του δείκτη, έτσι εξαφανίσουν την αύξηση.
Απαντήθηκε 09/12/2008 στις 23:05
πηγή χρήστη

ψήφοι
1

Ο χειριστής μετά την αύξηση index++αυξάνει τη μεταβλητή, αλλά επιστρέφει παλιά αξία του, έτσι

int i = 5;
System.out.println(i++);

θα εκτυπώσει 5 ακόμη i είναι πλέον ίσο με 6.

αν θέλετε να επιστρέψετε την τιμή μετά τη χρήση της λειτουργίας αύξησης ++index

Απαντήθηκε 09/12/2008 στις 23:04
πηγή χρήστη

ψήφοι
1

Η εκχώρηση εμφανίζεται μετά η έκφραση έχει αξιολογηθεί. Έτσι δείκτης ++ έχει μια τιμή 0, αν και όπως ένας δείκτης παρενέργεια αυξάνεται. Στη συνέχεια, η τιμή (0) αποδίδεται στο ευρετήριο.

Απαντήθηκε 09/12/2008 στις 23:02
πηγή χρήστη

ψήφοι
0

Θα πρέπει να εξετάσουμε τη σειρά αξιολογούνται τα πράγματα.

στην ακόλουθη δήλωση

Δείκτης = δείκτης ++?

τρία πράγματα συμβαίνουν 1), δεδομένου ότι είναι δείκτης ++, η αξία του δείκτη προσδιορίζεται 2) δείκτη αυξάνεται, 3) η τιμή που προσδιορίστηκε στο βήμα ένα κατόπιν εκχωρείται στη μεταβλητή στην αριστερή πλευρά της εξίσωσης

Απαντήθηκε 09/12/2008 στις 23:06
πηγή χρήστη

ψήφοι
-1

Δείτε http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html για πληροφορίες σχετικά με τους κανόνες αξιολόγησης postfix.

Επίσης δείτε http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39438 για πληροφορίες.

Απαντήθηκε 09/12/2008 στις 23:06
πηγή χρήστη

ψήφοι
-1

Η απάντηση σε αυτό το ερώτημα θα πρέπει να βοηθήσει. Η θέση προσαύξηση κάνει να ενημερώσετε την τιμή του δείκτη, αλλά επιστρέφει την τιμή πριν από την ενημέρωση.

Απαντήθηκε 09/12/2008 στις 23:04
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more