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

Pointers in C


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

Δημοσ.

Καλησπέρα.Έχω το παρακάτω παράδειγμα:

 

 

 
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) είναι εντάξει το καταλαβαίνω αλλά πως προκύπτουν τα υπόλοιπα?Επίσης τι ακριβώς κάνει η τελευταία εντολή??Ευχαριστώ πολύ

Δημοσ.

Όταν έχεις ένα πίνακα a και θέλεις να προσπελάσεις ένα στοιχείο του, η έκφραση *(a + i) είναι ισοδύναμη με την έκφραση a. Η άσκηση παίζει με αυτό. Πάρε μία-μία τις γραμμές και γράψε κάτω από κάθε μία τι μορφή θα έχει σε εκείνο το στάδιο ο πίνακας.

Δημοσ.

(Απέσυρα την απάντηση γιατί έχω κάποιο λάθος σε 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

Δημοσ.

 

  Εμφάνιση κρυμμένου περιεχομένου

 

  • Like 1

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

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

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

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

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

Σύνδεση

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

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