ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Σχετικά έγγραφα
Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός ΙI (Θ)

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Διαδικασιακός Προγραμματισμός

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραµµατισµό «C»

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στον δομημένο προγραμματισμό

Δομημένος Προγραμματισμός

Διάλεξη 11η: Δείκτες, μέρος 1

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Δομές Δεδομένων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Διδάσκων: Παναγιώτης Ανδρέου

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Εισαγωγή στον Προγραμματισμό

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διάλεξη 5: Δείκτες και Συναρτήσεις

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εισαγωγή στις Συναρτήσεις

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Διαδικασιακός Προγραμματισμός

Διάλεξη 12η: Δείκτες, μέρος 2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Ανάπτυξη και Σχεδίαση Λογισμικού

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στον Προγραμματισμό

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

5ο σετ σημειώσεων - Δείκτες

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον Προγραμματισμό

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ. p: i: 3 p: i: 5

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Δομημένος Προγραμματισμός

Διδάσκων: Παναγιώτης Ανδρέου

Η βασική συνάρτηση προγράμματος main()

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμό για ΗΜΥ

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Δομημένος Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Στοιχειώδης προγραμματισμός σε C++

Ανάπτυξη και Σχεδίαση Λογισμικού

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Διαδικασιακός Προγραμματισμός

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η γλώσσα προγραμματισμού C

Οι δείκτες στη γλώσσα C

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Μεταβλητές τύπου χαρακτήρα

Ενδεικτική περιγραφή μαθήματος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Προγραμματισμός Η/Υ (ΤΛ2007 )

Βασικά Στοιχεία της Java

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Εισαγωγή στη γλώσσα προγραμματισμού C++

Transcript:

Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη κλήση συναρτήσεων μέσω αναφοράς και να δημιουργούν και να χειρίζονται δυναμικές δομές δεδομένων. Παρακάτω ακολουθούν αρκετά χρήσιμα παραδείγματα για την κατανόηση της λειτουργίας τους και την αποφυγή σύγχυσης του δείκτη με το περιεχόμενο στο οποίο μας οδηγεί. Η πλήρης κατανόηση των δεικτών θα ολοκληρωθεί στις ασκήσεις των συναρτήσεων. 1. Εισαγωγικά στοιχεία για τους Δείκτες H RAM ενός υπολογιστή αποτελείται από πολλές χιλιάδες διαδοχικές θέσεις αποθήκευσης και κάθε θέση προσδιορίζεται από μία μοναδική διεύθυνση. Όταν χρησιμοποιείτε τον υπολογιστή σας το λειτουργικό σύστημα χρησιμοποιεί κάποιο κομμάτι της μνήμης του συστήματος για τις εκάστοτε λειτουργίες που εκτελούνται. Όταν δηλώνετε μία μεταβλητή σε ένα πρόγραμμα στη C o μεταγλωττιστής δεσμεύει μια θέση μνήμης με μία μοναδική διεύθυνση για να αποθηκεύσει αυτή τη μεταβλητή. Όταν το πρόγραμμα χρησιμοποιεί το όνομα της μεταβλητής προσπελαύνει αυτόματα την κατάλληλη θέση μνήμης. Ένα στιγμιότυπο αυτής της διαδικασίας παρουσιάζεται στο Σχήμα 1. Μια μεταβλητή με το όνομα test έχει δηλωθεί στην οποία έχει αποθηκεύει η τιμή 100. Ο μεταγλωττιστής έχει δεσμεύσει χώρο στην διεύθυνση 1004 για την μεταβλητή και έχει συνδέσει το όνομα test με αυτήν. Σχήμα 1: Μεταβλητή Προγράμματος σε μία συγκεκριμένη θέση μνήμης. Θα πρέπει να σημειώσετε ότι η διεύθυνση της μεταβλητής test στη C είναι ένας ακέραιος και μπορεί να αντιμετωπιστεί όπως ένας οποιοσδήποτε άλλος ακέραιος στην C. Εάν γνωρίζετε τη διεύθυνση μιας μεταβλητής μπορείτε να δημιουργήσετε μία δεύτερη μεταβλητή στην οποία να αποθηκεύσετε την διεύθυνση της πρώτης. Αυτό φαίνεται και στην γραφική αναπαράσταση του Σχήματος 2 (και πιο απλοϊκά στο Σχήμα 3). Η μεταβλητή Ptr αντιστοιχεί στην θέση μνήμης 12004 και η τιμή που περιέχεται σε αυτή τη θέση μνήμης (3000) ισούται με τη διεύθυνση μνήμης που αντιστοιχεί η μεταβλητής gate η οποία περιέχει την τιμή 23. Σε ποια διεύθυνση δείχνει η Ptr δεν μας αφορά άμεσα και δεν αξιοποιείται σε αυτή τη λειτουργία. test Σχήμα 2: Αναπαράσταση ενός δείκτη που δείχνει σε μια ακέραια μεταβλητή στην μνήμη. Ptr gate 23 Σχήμα 3: Πιο απλοϊκή αναπαράσταση. 1/6

1.1 Δήλωση Δεικτών Ένας δείκτης είναι μία ακέραια μεταβλητή και όπως όλες οι μεταβλητές πρέπει να δηλωθούν στην αρχή του προγράμματος πριν χρησιμοποιηθεί στην συνέχεια. Τα ονόματα των μεταβλητών-δεικτών ακολουθούν τους ίδιους κανόνες με τις άλλες μεταβλητές και πρέπει να είναι μοναδικά. Μία δήλωση δείκτη παίρνει την ακόλουθη μορφή: Typos_Metablitis *onoma_deikti; O Typos_Metablitis είναι οποιοσδήποτε από τους τύπους μεταβλητών της C (π.χ. int char double κτλ) και δηλώνει τον τύπο της μεταβλητής στην οποία δείχνει ο δείκτης. Ο αστερίσκος (*) είναι ο τελεστής έμμεσης διευθυνσιοδότησης και δηλώνει ότι το onoma_deikti είναι ένας δείκτης στον τύπο Typos_Metablitis. Οι δείκτες μπορούν να δηλώνονται μαζί με άλλες μεταβλητές. Προσοχή στο γεγονός πως το μέγεθος που καταλαμβάνεται από μία μεταβλητή δείκτη είναι πάντα το ίδιο ανεξάρτητα από τον τύπο της μεταβλητής στον οποίο αυτή δείχνει. Υπάρχει συγκεκριμένο μέγεθος μνήμης που απαιτείται για όλες τις μεταβλητές τύπου δείκτη και αυτό διαφέρει ανάλογα με την έκδοση της C το λειτουργικό αλλά και την αρχιτεκτονική του υπολογιστή. Με την εντολή sizeof μπορείτε να γνωρίζετε πόσο είναι αυτό το μέγεθος σε bytes ανάλογα με τον υπολογιστή εκτέλεσης του προγράμματος σας. 1.2 Απόδοση τιμών σε δείκτες Όπως και οι συνήθεις μεταβλητές έτσι και οι δείκτες χωρίς αρχική τιμή μπορούν να χρησιμοποιηθούν αλλά τα αποτελέσματα είναι απρόβλεπτα!! Έως ότου αντιστοιχηθεί σε μια έγκυρη διεύθυνση μεταβλητής ένας δείκτης δεν είναι χρήσιμος. Η διεύθυνση δεν αποθηκεύεται στον δείκτη με «μαγικό τρόπο» και ούτε μπορούμε να το κάνουμε αυθαίρετα. Ο προγραμματιστής θα πρέπει να τοποθετήσει μία κατάλληλη τιμή εκεί χρησιμοποιώντας τον τελεστή διεύθυνσης (&). Όταν τοποθετηθεί πριν το όνομα μιας μεταβλητής ο τελεστής διεύθυνσης τ ότ ε επιστρέφει την διεύθυνση της μεταβλητής. Έτσι μπορεί κάποιος να δώσει αρχική τιμή σε ένα δείκτη με μια πρόταση της παρακάτω μορφής: Onoma_Deikti = &Onoma_Metablitis; Ακολουθούν ενδεικτικά παραδείγματα για τη χρήση των τελεστών * και &: ΠΑΡΑ ΕΙΓΜΑ_1 main() int a; int *a_ptr; a = 23; a_ptr = &a; printf("the address of a is printf("the address of a_ptr is printf("the value of a_ptr is printf("the value of a is printf("the value of *a_ptr is %p %p %p %d %d &a); &a_ptr); a_ptr); a); *a_ptr); *a_ptr = 66; printf("); printf("after the execution of *a_ptr = 66; : ); printf("the value of a is %d a); return 0; 2/6

Όταν εκτελέσετε εσείς τον κώδικα δεν θα έχετε ακριβώς τα ίδια αποτελέσματα. Εξηγήστε γιατί συμβαίνει αυτό. ΠΑΡΑ ΕΙΓΜΑ_2 main() int a *b size_b size_d; float c *d; b = &a; d = &c; scanf("%d"b); printf("value of a is equal to %d while its address is %p a b); scanf("%d"&a); printf("value of a is equal to %d while its address is %p a b); size_b = sizeof(b); size_d = sizeof(d); if (size_b == size_d) printf("size of pointers for int and float variables is the same and equals with %d bytes size_b); else printf("different size of pointers for int and float variables ); return 0; Όταν εκτελέσετε εσείς τον κώδικα δεν θα έχετε ακριβώς τα ίδια αποτελέσματα. Εξηγήστε γιατί συμβαίνει αυτό. 1.3 Δείκτες και πίνακες Εφόσον οι πίνακες αποτελούνται από συνεχόμενες θέσης μνήμης αρκεί να βρούμε την πρώτη κάθε φορά θέση και να πλοηγηθούμε αντιστοίχως στις θέσεις των άλλων στοιχείων. Η σύνδεση των δεικτών με τους πίνακες γίνεται ως εξής: «Ένα όνομα πίνακα είναι ένας δείκτης στο πρώτο στοιχείο του πίνακα». Έτσι εάν έχετε ένα πίνακα data[] η δήλωση σε οποιαδήποτε επόμενη γραμμή του data αντιπροσωπεύει τη διεύθυνση του πρώτου στοιχείου της διάταξης (ισοδύναμο με το &data[0]). Επομένως μπορείτε να δηλώσετε ένα μεταβλητό δείκτη και να του ορίσετε για αρχική τιμή να δείχνει τον πίνακα. Όπως θα θυμάστε τα στοιχεία ενός πίνακα αποθηκεύονται σε διαδοχικές θέσεις μνήμης με το πρώτο στοιχείο στη χαμηλότερη διεύθυνση. Τα διαδοχικά στοιχεία διάταξης (εκείνα με δείκτη μεγαλύτερο από 0) αποθηκεύονται σε υψηλότερες διευθύνσεις. Το πόσο υψηλότερα εξαρτάται από τον τύπο δεδομένων της διάταξης (π.χ. char int float κ.οκ.). 3/6

Ας υποθέσουμε μια διάταξη τύπου int. Μιά απλή μεταβλητή τύπου int καταλαμβάνει 4 bytes μνήμης. Κάθε στοιχείο της διάταξης θα βρίσκεται δύο bytes πάνω από το προηγούμενο στοιχείο και η διεύθυνση κάθε στοιχείου της διάταξης θα είναι υψηλότερη κατά δύο από τη διεύθυνση του προηγούμενου στοιχείου. Έχετε τη δυνατότητα να προσπελάσετε τα στοιχεία ενός πίνακα χρησιμοποιώντας ένα πίνακα. Ενας δείκτης πρέπει να αυξηθεί κατά 4 για να προσπελάσει επιτυχώς ένα πίνακα τύπου int και κατά 8 για να προσπελάσει επιτυχώς ένα πίνακα τύπου double. ΠΑΡΑ ΕΙΓΜΑ void main () int x; int a[10]; /* Pinakas typoy int */ double b[10]; /* Pinakas typoy double*/ float c[10]; /* Pinakas typoy float */ printf("\t\tinteger \tfloat \t\tdouble); for(x=0;x<10;x++) printf("element %d \t%ld \t%ld \t%ldx&a[x]&c[x]&b[x]); Οι ακριβείς διευθύνσεις που προβάλλει το σύστημα σας πιθανότατα θα διαφέρουν από αυτές αλλά οι αποστάσεις του κάθε στοιχείου από το επόμενο θα είναι οι ίδιες. Στο συγκεκριμένο πρόγραμμα υπάρχουν 4 bytes στα στοιχεία int 4 bytes ανάμεσα στα στοιχεία float και 8 bytes ανάμεσα στα στοιχεία double. 4/6

1.4 Αριθμητική Δεικτών Όταν αυξάνετε ένα δείκτη αυξάνετε την τιμή του. Για παράδειγμα όταν αυξάνετε ένα δείκτη κατά 1 η αριθμητική δεικτών αυξάνει αυτόματα την τιμή του δείκτη έτσι ώστε να δείχνει στο επόμενο στοιχείο του πίνακα. Με άλλα λόγια η C γνωρίζει τον τύπο δεδομένων που δείχνει ο δείκτης και αυξάνει την διεύθυνση που είναι αποθηκευμένη στον δείκτη κατά το μέγεθος του τύπου δεδομένων. Οι ίδιες έννοιες ισχύουν και για την μείωση δεικτών. Η μείωση ενός δείκτη είναι στην πραγματικότητα μία ειδική περίπτωση αύξησης με την πρόσθεση ενός αρνητικού αριθμού. Εάν μειώσετε έναν με τους τελεστές ή -= η αριθμητική δεικτών προσαρμόζει τον δείκτη για το μέγεθος των στοιχείων του πίνακα. Προσοχή στο γεγονός πως η προτεραιότητα του τελεστή * είναι μικρότερη από αυτή των ++ και --. Συνεπώς η εκτέλεση της εντολής *ptr++ διαφέρει από αυτό της (*ptr)++. Πιο συγκεκριμένα η πρώτη έκφραση μεταφράζεται ως «αύξησε την τιμή της μεταβλητής δείκτη ptr» σύμφωνα πάντα με την αριθμητική που υπηρετεί ανάλογα με το πρόγραμμα στο οποίο καλείται ενώ η δεύτερη ως «αύξησε κατά 1 την τιμή της μεταβλητής που δείχνει ο δείκτης ptr». ΠΑΡΑ ΕΙΓΜΑ void main () int i_array[10]=48122789-67199035-65; float f_array[10]=.00.10.20.30.40.50.60.70.80.9; float *f_ptr; int *i_ptrcount; f_ptr=f_array; i_ptr=i_array; printf("count\t i_array\t f_array); for (count=0; count<10; count++ i_ptr++ f_ptr++) printf("%d\t %d\t\t %.2f count *i_ptr *f_ptr); 5/6

2. ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ 1. Να εκτελέσετε τα ακόλουθα προγράμματα και να απαντήσετε στις παρακάτω ερωτήσεις. Να υποθέσετε ότι οι μη προσημασμένοι short ακέραιοι αποθηκεύονται σε 4 bytes: Να δηλώσετε ένα πίνακα τύπου unsigned short int με το όνομα value o οποίος αποτελείται από 5 στοιχεία. Να δώσετε αρχικές τιμές στα στοιχεία τους ζυγούς ακεραίους 4 12. Να δηλώσετε ένα δείκτη vptr που δείχνει σε ένα αντικείμενο τύπου unsigned short int. Να προβάλετε τα στοιχεία του πίνακα value χρησιμοποιώντας σημειολογία δεικτών θέσης πίνακα. Χρησιμοποιείστε ένα βρόχο for. ώστε δύο ξεχωριστές προτάσεις που εκχωρούν την διεύθυνση έναρξης του πίνακα value στο δείκτη vptr. 2. Να γραφεί πρόγραμμα που να εκτελεί τις παρακάτω λειτουργίες Δηλώνει ένα πίνακα από 10 ακέραια στοιχεία Καταχωρεί διαβάζοντας από το χρήστη 10 τιμές Εμφανίζει ποιος είναι ο μεγαλύτερος εξ αυτών και ποια η διεύθυνση μνήμης του. 3. Να γραφτεί πρόγραμμα που να δηλώνει 3 ακέραιες μεταβλητές (x y z) και 3 αντίστοιχους δείκτες (ptr_x ptr_y ptr_z). Στη συνέχεια να διαβάζει από το χρήστη 2 από αυτούς να εκτελεί το γινόμενο τους και να το καταχωρεί στην τρίτη κατά σειρά μεταβλητή. Όλες οι παραπάνω διαδικασίες να εκτελεστούν χρησιμοποιώντας τους δείκτες και όχι τα ονόματα των μεταβλητών. 4. Να γραφτεί πρόγραμμα που διαβάζει από το χρήστη 5 ακέραιες τιμές τις οποίες καταχωρεί σε ένα μονοδιάστατο πίνακα (my_matrix) και τις ταξινομεί κατά φθίνουσα σειρά με τη χρήση δεικτών. Στη συνέχεια πάλι με τη χρήση δεικτών να εμφανίζει τα στοιχεία κατά αύξουσα σειρά. 6/6