Δημοσιεύτηκε: 24 Ιούλ 2011, 20:25
έγραψε:ΟΠως λεει και o migf1 εδω εκμεταλευομαστε οτι μετα το for η τιμη ειναι 25. Ναι αλλα αυτο που ειναι ομως αποθηκευμενο??? Μεσα στο Memory layout σε ποιο σημειο ειναι το 25??? μιας και δεν εχω τιμη επιστροφης απο καποια συναρτηση ωστε να μπει στο STACK.
Το 25 (όπως κι οι υπόλοιπες τιμές του array) στο συγκεκριμένο παράδειγμα είναι αποθηκευμένες στο section που αποθηκεύονται οι αρχικοποιημένες μεταβλητές (δλδ στο data segment) μια και το array μας είναι αρχικοποιημένο.
Star_Light έγραψε:Καθως διαβαζα τα τουτοριαλ του migf1 για τα strings μου ηρθε να παιξω λιγο με τους δεικτες.
ΘΥμηθηκα και το κρυφτο που παιζαμε οταν ειμασταν μικροι που μετρουσε καποιος 5 , 10 , 15 , 20 , 25
και μετα ηθελα να το κανω και αντιστροφα!Spoiler: show
Αυτό εδώ το κομμάτι δεν είναι οκ...
- Κώδικας: Επιλογή όλων
while((*ip)!=5)
{
ip--;
printf("\n\n");
printf("%d",*ip);
}
διότι στη συνθήκη του while-loop εξετάζεις με το *ip το περιεχόμενο της διεύθυνσης μνήμης που ακολουθεί το τελευταίο στοιχείο του array. Στο for-loop είναι οκ επειδή εκεί εξετάζει τη διεύθυνση της μνήμης, μετά το τέλος του for-loop όμως ο ip εξακολουθεί να δείχνει σε εκείνη τη διεύθυνση.
Άρα πρέπει να τον πας μια θέση πίσω πριν αρχίζεις να εξετάζεις το περιεχόμενό του στη συνθήκη του while-loop...
Ένας τρόπος είναι να το κάνεις έτσι..
- Κώδικας: Επιλογή όλων
ip--;
while( *ip != 5) {
ip--;
printf("\n\n");
printf("%d",*ip);
}
Άλλος τρόπος είναι να το κάνεις έτσι...
- Κώδικας: Επιλογή όλων
while( *--ip != 5)
printf("\n%d\n", *ip);
printf("\n%d\n", *ip);