Vkt678 Δημοσ. 1 Φεβρουαρίου 2015 Δημοσ. 1 Φεβρουαρίου 2015 Καλησπέρα.Έχω το παρακάτω παράδειγμα: int i,a[8],*pa; for( i=0; i<8 ; i++ ) a[i]=i*i; pa=&a[0]; a[6]= *(a+4); *(pa+3)=a[5]; a[0]=*((pa++)+2); *((++pa)+5)=a[1]; *(&a[5]-1) = *(--pa); Όπως φαίνεται,ο πίνακας αυτός αρχικά περιέχει τα στοιχεία 0 1 4 9 16 25 36 49.Μπορεί κανείς να μου εξηγήσει μετά από τις παρακάτω εντολές γιατί τα περιεχόμενα του πίνακα είναι τα 4 1 4 25 1 25 16 1 ???Για την εντολή a[6]= *(a+4) είναι εντάξει το καταλαβαίνω αλλά πως προκύπτουν τα υπόλοιπα?Επίσης τι ακριβώς κάνει η τελευταία εντολή??Ευχαριστώ πολύ
imitheos Δημοσ. 1 Φεβρουαρίου 2015 Δημοσ. 1 Φεβρουαρίου 2015 Όταν έχεις ένα πίνακα a και θέλεις να προσπελάσεις ένα στοιχείο του, η έκφραση *(a + i) είναι ισοδύναμη με την έκφραση a. Η άσκηση παίζει με αυτό. Πάρε μία-μία τις γραμμές και γράψε κάτω από κάθε μία τι μορφή θα έχει σε εκείνο το στάδιο ο πίνακας.
ggeo1 Δημοσ. 1 Φεβρουαρίου 2015 Δημοσ. 1 Φεβρουαρίου 2015 (Απέσυρα την απάντηση γιατί έχω κάποιο λάθος σε 1 Pointer,μη σε μπερδέψω! ,δε λειτουργώ καλά το βράδυ ).Θα στείλω αύριο την απάντηση,αν δεν έχεις μέχρι τότε την απάντηση. EDIT: Το ξανακοίταξα τελικά , δεν είχα προσέξει το postfix . pa=&a[0]; ο pointer δείχνει στο α[0] δηλ στο 0. α[ 0 ] = 0 a[6]= *(a+4); το α[ 4 ] που είναι το 16 αντιγράφεται στο α[ 6 ] ,επομένως , α[ 6 ] = α [4] = 16. *( pa+3 ) = a[ 5 ]; το α[ 5 ] = 25 αντιγράφεται στο α[ 3 ] ,άρα α[ 3 ] = α[ 5 ] = 25 a[ 0 ] = *( (pa++) + 2 ); Eδώ , αυξάνεται ο pointer κατά 1 αλλά επειδή η αύξηση είναι στα δεξία (postfix) δε θα 'φανεί' σε αυτήν την ανάθεση στο α[ 0 ] .Άρα, αυξάνεται ο pointer κατά 2 ,επομένως πάμε στο α[ 2 ] που είναι το 4 και 'ετσι , α[ 0 ] = 4. *( (++pa) + 5 ) = a[ 1 ]; Το α[ 1 ] = 1. Αριστερά : Αυξάνουμε τον pointer κατά 1 (οπότε δείχνει στο 2 γιατί έχουμε και την προηγούμενη αύξηση) και προσθέοτουμε 5 , οπότε δείχνει στο α[ 7 ] .Άρα , α[ 7 ] = α[ 1] = 1. *( &a[ 5 ] - 1 ) = *( --pa) ; Μειώνουμε τον pointer κατά 1 ,οπότε δείχνει στο α[ 1 ] = 1. Αριστερα : Παίρνουμε τη διεύθυνση του α[5] ,δηλ τον pointer στο 5 και αφαιρούμε 1 ,δηλ είμαστε στο α[ 4 ] . α[4] = α[ 1 ] = 1
migf1 Δημοσ. 2 Φεβρουαρίου 2015 Δημοσ. 2 Φεβρουαρίου 2015 Είμαι εκτός θέματος, αλλά δεν κρατήθηκα (για μια ακόμα φορά) να εκφράσω τη θλίψη μου για τις κατά τη γνώμη μου απαράδεκτες "ασκήσεις" που βάζουν για να εξοικειώσουν τους φοιτητές με δείκτες. Είναι η 2η φορά μέσα σε διάστημα λίγων ημερών, που ανοίγεται θέμα για δείκτες στην C, με άσκηση που δεν έχει απολύτως καμία επαφή με την πραγματικότητα. Και όχι μόνο δεν έχει καμία επαφή, αλλά προωθεί κιόλας έστω και εκ παραδρομής τόσα πολλά bad-practices που αν γράψει κανείς τέτοιο κώδικα είτε σε interview είτε σε δουλεια, το πιθανότερο είναι να τον "πετάξουν έξω με τις κλωτσιές"... που λέει ο λόγος 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα