MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Το αλφαριθμητικό (string)
Advertisements

Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
Τα στοιχειώδη περί γεωδαιτικών υπολογισμών
Εισαγωγή στους Η/Υ Πίνακες.
Πινακες (Arrays) Σημασια Συνταξη Αρχικοποιηση Προσβαση Παραμετροι
ΜΑΘ3122/106 Γλώσσα Προγραμματισμού
Προγραμματισμός Ι Πίνακες •Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Αντικειμενοστραφής Προγραμματισμός
ΜΑΘ 3122 (106) Γλώσσα προγραμματισμού
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΜΑΘ-3122/106 Προγραμματισμός
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 4: Δείκτες, συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ.
ΜΑΘ-3122/106 Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Αλγόριθμοι Ταξινόμησης
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Ασκήσεις Caches
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Δομημένος Προγραμματισμός και Δομές.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
Ανάλυση του λευκού φωτός και χρώματα
© GfK 2012 | Title of presentation | DD. Month
-17 Προσδοκίες οικονομικής ανάπτυξης στην Ευρώπη Σεπτέμβριος 2013 Δείκτης > +20 Δείκτης 0 a +20 Δείκτης 0 a -20 Δείκτης < -20 Σύνολο στην Ευρωπαϊκή Ένωση:
+21 Προσδοκίες οικονομικής ανάπτυξης στην Ευρώπη Δεκέμβριος 2013 Δείκτης > +20 Δείκτης 0 να +20 Δείκτης 0 να -20 Δείκτης < -20 Σύνολο στην Ευρωπαϊκή Ένωση:
Βαρόμετρο ΕΒΕΘ - Καταναλωτές Σεπτέμβριος “Η καθιέρωση ενός αξιόπιστου εργαλείου καταγραφής του οικονομικού, επιχειρηματικού και κοινωνικού γίγνεσθαι.
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Κεφάλαιο 2ο Πεπερασμένα αυτόματα.
ΙΣΟΛΟΓΙΣΜΟΣ ΒΑΣΕΙ Δ.Λ.Π. (ΕΝΑΡΞΗΣ)
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
Αποκεντρωμένη Διοίκηση Μακεδονίας Θράκης ∆ιαχείριση έργων επίβλεψης µε σύγχρονα µέσα και επικοινωνία C2G, B2G, G2G Γενική Δ/νση Εσωτερικής Λειτουργίας.
1/5/ ΧΡΗΣΕΙΣ ΤΗΣ ΗΛΙΑΚΗΣ ΑΝΤΙΝΟΒΟΛΙΑΣ 1/5/ (πηγή: HELIOAKMI).
2006 GfK Praha CORRUPTION CLIMATE IN EUROPE % % % %0 - 10% % % % % % ΚΛΙΜΑ ΔΙΑΦΘΟΡΑΣ Η.
Βαρόμετρο ΕΒΕΘ Μάρτιος “Η καθιέρωση ενός αξιόπιστου εργαλείου καταγραφής του οικονομικού, επιχειρηματικού και κοινωνικού γίγνεσθαι του Νομού Θεσσαλονίκης”
Δείκτες, Πίνακες σε Δείκτες, Δείκτες σε Συναρτήσεις
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Τρίτο Συστήματα.
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Lists– Λίστες 1. Αυτό-αναφορικές δομές Τα μέλη μίας δομής μπορεί να είναι οποιουδήποτε τύπου, ακόμα και δείκτες σε δομές του ίδιου τύπου. Χρησιμοποιώντας.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
Βάσεις Δεδομένων Εργαστήριο ΙΙ Τμήμα Πληροφορικής ΑΠΘ
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
+19 Δεκέμβριος 2014 Δείκτης > +20 Δείκτης 0 έως +20 Δείκτης 0 έως -20 Δείκτης < -20 Συνολικά της ΕΕ: +5 Δείκτης > +20 Δείκτης 0 έως +20 Δείκτης 0 έως -20.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Δείκτες (Pointers) (1/2)
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Δείκτες (Pointers) (1/2)
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
Βασικές Έννοιες Εισόδου-Εξόδου Πίνακες και Δείκτες
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Δείκτες 1/4 Σύμβαση Τελεστής &
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
Εισαγωγή στον Προγ/μό Υπολογιστών
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 2 Δείκτες Τι είναι: – τύπος μεταβλητών (όπως integer) Τι αποθηκεύουν: – την διεύθυνση στη μνήμη άλλων μεταβλητών Τι χρειάζονται: – Κυρίως, για δυναμική διαχείριση μνήμης και δυναμικές δομές δεδομένων – Call-by-reference – Στενή σχέση με τους πίνακες Πηγή πολλών λαθών που δύσκολα ανιχνεύονται

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 3 Δείκτες int Counter = 7; int *PointerToCounter; PointerToCounter = &Counter; ΌνομαΘέση Μνήμης Τιμή …… Counter …… PointerToCounter count 7 7 countPtr

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 4 Δήλωση Δεικτών: Το * χρησιμοποιείται για να δηλώσει δείκτη int *myPtr; – Ορίζει δείκτη σε int (pointer of type int *) Δήλωση πολλών μεταβλητών τύπου δείκτη απαιτεί τη χρήση ενός * μπροστά από κάθε μία: int *myPtr1, *myPtr2; Μπορούμε να δηλώσουμε δείκτη σε οποιοδήποτε είδος μεταβλητής (ακόμα και άλλο δείκτη) double *myPtr2; char **myPtr2;

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 5 Τελεστές Δεικτών &μεταβλητή – q = &a; – Επέστρεψε την διεύθυνση στην οποία είναι αποθηκευμένη η μεταβλητή *δείκτης – a = *q; – Επέστρεψε τα περιεχόμενα της διεύθυνσης στην οποία δείχνει ο δείκτης

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 6 Τελεστές Δεικτών & (address operator) int y = 5; int *yPtr; yPtr = &y; // O yPtr παίρνει την διεύθυνση y yPtr y 5 yptr y 5 Η διεύθυνση του y είναι η τιμή της yptr

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 7 Τελεστές Δεικτών * (indirection/dereferencing operator) int y = 5; int *yPtr; yPtr = &y; *yPtr = *yPtr * 2; – Μπορώ να αλλάζω την τιμή των μεταβλητών με τη βοήθεια δεικτών – Η τιμή του y γίνεται ίση με 10 – Η μεταβλητή y αλλάζει τιμή, χωρίς στον κώδικα να φαίνεται αυτό άμεσα σε μια εντολή που εμφανίζει την y! – H y δηλαδή, αποκτά ένα «ψευδώνυμο»: το *yPtr * και & είναι ανάποδα και αλληλοακυρώνονται

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 8 Ανάθεση δεικτών Ένας δείκτης μπορεί να ανατεθεί σε άλλο δείκτη ίδιου τύπου: int a = 4; int * p; p = &a; int * q = p; Η εντολή int * q = p; ορίζει το q ως δείκτη σε int και του δίνει αρχική τιμή το p. Τα q και p δείχνουν την ίδια θέση μνήμης και, άρα, *q και *p δείχνουν στην ίδια μεταβλητή (η a).

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 9 Αρχικοποίηση δεικτών Ένας δείκτης που δεν του αποδοθεί αρχική τιμή δείχνει σε τυχαία περιοχή μνήμης. Η προσπέλαση στην τυχαία θέση μνήμης αυτή θα προκαλέσει σφάλμα εκτέλεσης, αν η συγκεκριμένη θέση δεν έχει δοθεί από το λειτουργικό σύστημα στο πρόγραμμά. Αν έχει δοθεί, και γράψουμε στη θέση μνήμης αυτή, θα “πανωγράψουμε” άλλη “δική μας” μεταβλητή χωρίς σφάλμα εκτέλεσης. Σε ένα οποιοδήποτε δείκτη μπορεί να γίνει απόδοση της τιμής 0. Το 0 δεν αποτελεί αριθμό θέσης μνήμης και, επομένως, η ανάθεση αυτή υποδηλώνει ότι ο δείκτης δε δείχνει σε κανένα αντικείμενο. Σε τέτοιο δείκτη (null pointer) η δράση του (*) δεν επιτρέπεται (προκαλεί λάθος κατά την εκτέλεση αλλά όχι κατά τη μεταγλώττιση του προγράμματος). Η σύγκριση ενός άγνωστου δείκτη (π.χ. όρισμα συνάρτησης) με το 0 πρέπει να προηγείται οποιασδήποτε απόπειρας προσπέλασης της θέσης μνήμης στην οποία θεωρούμε ότι δείχνει. Προσέξτε ότι σε αυτό το σημείο υπάρχει μία βασική διαφορά με την αναφορά: ένας δείκτης μπορεί να μη συνδέεται με κανένα αντικείμενο ενώ, αντίθετα, μία αναφορά είναι οπωσδήποτε συνδεδεμένη με κάποια ποσότητα.

MΑΘ 106/3122Ξενοφών Ζαμπούλης 1/* 2 Using the & and * operators */ 3#include 4 5int main() 6{6{ 7 int a; /* a is an integer */ 8 int *aPtr; /* aPtr is a pointer to an integer */ 9 10 a = 7; 11 aPtr = &a; /* aPtr set to address of a */ printf( "The address of a is %p" 14 "\nThe value of aPtr is %p", &a, aPtr ); printf( "\n\nThe value of a is %d" 17 "\nThe value of *aPtr is %d", a, *aPtr ); printf( "\n\nShowing that * and & are inverses of " 20 "each other.\n&*aPtr = %p" 21 "\n*&aPtr = %p\n", &*aPtr, *&aPtr ); return 0; 24} The address of a is 0012FF88 The value of aPtr is 0012FF88 The value of a is 7 The value of *aPtr is 7 Proving that * and & are complements of each other. &*aPtr = 0012FF88 *&aPtr = 0012FF88 The address of a is the value of aPtr. The * operator returns an alias to what its operand points to. aPtr points to a, so *aPtr returns a. Notice how * and & are inverses

MΑΘ 106/3122Ξενοφών Ζαμπούλης 1/* 2 Cube a variable using call-by-reference 3 with a pointer argument */ 4 5#include 6 7void cubeByReference( int * ); /* prototype */ 8 9int main() 10{ 11 int number = 5; printf( "The original value of number is %d", number ); 14 cubeByReference( &number ); 15 printf( "\nThe new value of number is %d\n", number ); return 0; 18} 19 20void cubeByReference( int *nPtr ) 21{ 22 *nPtr = *nPtr * *nPtr * *nPtr; /* cube number in main */ 23} The original value of number is 5 The new value of number is 125 Notice how the address of number is given - cubeByReference expects a pointer (an address of a variable). Inside cubeByReference, *nPtr is used ( *nPtr is number ). Notice that the function prototype takes a pointer to an integer ( int * ).

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 12 Sort με χρήση της Swap void swap( int *n1, int *n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; } int x = 10, y=20; swap(&x,&y);

MΑΘ 106/3122Ξενοφών Ζαμπούλης 1/* Fig. 7.15: fig07_15.c 2 This program puts values into an array, sorts the values into 3 ascending order, and prints the resulting array. */ 4#include 5#define SIZE 10 6void bubbleSort( int *, const int ); 7 8int main() 9{9{ int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 12 int i; printf( "Data items in original order\n" ); for ( i = 0; i < SIZE; i++ ) 17 printf( "%4d", a[ i ] ); bubbleSort( a, SIZE ); /* sort the array */ 20 printf( "\nData items in ascending order\n" ); for ( i = 0; i < SIZE; i++ ) 23 printf( "%4d", a[ i ] ); printf( "\n" ); return 0; 28} 29 30void bubbleSort( int *array, const int size ) 31{ 32 sort gets passed the address of array elements (pointers). The name of an array is a pointer. void swap( int *, int * );

MΑΘ 106/3122Ξενοφών Ζαμπούλης 33 int pass, j; 34 for ( pass = 0; pass < size - 1; pass++ ) for ( j = 0; j < size - 1; j++ ) if ( array[ j ] > array[ j + 1 ] ) 39 swap( &array[ j ], &array[ j + 1 ] ); 40} 41 42void swap( int *element1Ptr, int *element2Ptr ) 43{ 44 int hold = *element1Ptr; 45 *element1Ptr = *element2Ptr; 46 *element2Ptr = hold; 47} Data items in original order Data items in ascending order

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 15 Αριθμητική Δεικτών Στους δείκτες μπορούμε να πραγματοποιούμε αριθμητικές πράξεις: – ++ ή –- Ο δείκτης δείχνει στο επόμενο ή προηγούμενο αντικείμενο, δηλ. αν είναι δείκτης σε ακέραιο στον επόμενο ή προηγούμενο ακέραιο – Αντίστοιχα για + ή +=, - ή -= – Οι δείκτες μπορούν να αφαιρούνται ο ένας από τον άλλο – Όλες αυτές οι πράξεις δεν έχουν νόημα εκτός αν πραγματοποιούνται πάνω δείκτη που δείχνει στα στοιχεία ενός πίνακα

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 16 Αριθμητική Δεικτών Πίνακας 5 στοιχείων τύπου int σε μηχανή με 4 byte ints – int v[5]; – int *vPtr; vPtr = &v[0] ή vPtr = v; //δείχνει στο πρώτο στοιχείο v[0] //vPtr στο 3000 – vPtr += 2; //vPtr στο 3008 vPtr δείχνει στο v[ 2 ] (αύξηση κατά 2), μια και η μηχανή έχει 4 byte ints, οπότε δείχνει 3008 pointer variable vPtr v[0]v[1]v[2]v[4]v[3] location

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 17 Σχέση μεταξύ πινάκων και δεικτών – Στοιχείο b[ 3 ] Μπορούμε να το πάρουμε σαν *( bPtr + 3 ) Σαν bPtr[ 3 ] – bPtr[ 3 ] == b[ 3 ] Με αριθμητική δεικτών: *( b + 3 )

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 18 Διεύθυνση Πινάκων και Δείκτες int *a; a δείκτης σε ακέραιο Δεσμεύεται μνήμη μόνο για την αποθήκευση του a (της διεύθυνσης) Μπορούμε να αλλάξουμε την διεύθυνση που δείχνει ο a int b[10]; b σταθερή διεύθυνση (δείκτης) σε ακέραιο Δεσμεύεται μνήμη για 10 ακέραιους Δεν μπορούμε να αλλάξουμε την διεύθυνση στην οποία αντιστοιχεί ο b

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 19 Πίνακες και Δείκτες Μπορούμε να περνάμε δείκτες σε συναρτήσεις που περιμένουν πίνακες και αντίστροφα. Σε κάθε περίπτωση περνάμε απλώς μία διεύθυνση μνήμης. Το παρακάτω γίνεται δεκτό: void f(int a[]); void q(int *b); int main() { int *c; int d[10]; f(c); q(d) }

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 20 Παράδειγμα - ptrarithm2.c (Ι) int n[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 1}, *p, c; // First way to traverse the array printf("First way to index the array.\n"); for (c=0; c < 10; c++) printf("n[%d] = %d\n", c, n[c]); printf("\nSecond way to index the array, through pointer arithmetic.\n"); for (c=0; c < 10; c++) printf("n[%d] = %d\n", c, *(n+c));

MΑΘ 106/3122 Ξενοφών Ζαμπούλης 21 Παράδειγμα - ptrarithm2.c (ΙΙ) printf("\nThird way to index the array, through pointers arithmetic.\n"); // We set the pointer to the beginning of the array p = n; for (c=0; c < 10; c++) printf("n[%d] = %d\n", c, *(p+c)); printf("\nFourth way to index the array, through pointers arithmetic.\n"); p = n; for (c=0 ; c < 10; c++) printf("n[%d] = %d, %d\n", c, *(p++), p);