ΗΥ-150 Προγραμμαηιζμός Δείκηες (Pointers) (1/2)

Σχετικά έγγραφα
ΗΥ-150. Προγραμματισμός

Δείκτες (Pointers) (1/2) ΗΥ150 Προγραμματισμός

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

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

Constructors and Destructors in C++

Δηζαγωγή ζηε γιώζζα C Παξνπζίαζε 3 ε : Δίζνδνο/ Έμνδνο - Σπλαξηήζεηο - Pointers

Προγραμματισμός Επιπλέον στοιχεία της C++

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

Ενδεικτικά Θέματα Στατιστικής ΙΙ

ΗΥ-150 Πξνγξακκατησκόο Ταμηλόκεσε θαη Αλαδήτεσε

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Ππογπαμμαηιζμόρ Ι (ΗΥ120)

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

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Πξνγξακκαηηζκόο Ι. Δείθηεο. Κσλζηαληίλνο Τζεξπέο. (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι)

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

Πανεπιστήµιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) είκτες και Συµβολοσειρές (Pointers. & Strings)

Προγραµµατισµός. Επιπλέον στοιχεία της C

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΘΔΜΑ 1 ο Μονάδες 5,10,10

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

Κβαντικοί Υπολογισμοί. Πέκπηε Γηάιεμε

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

242 - Ειζαγωγή ζηοσς Η/Υ

ΜΕΛΕΣΗ E.O.K. ΜΕ ΑΙΘΗΣΗΡΑ ΘΕΗ

Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο κόζηος ανά μονάδα παραγωγής. Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο ζηαθερό κόζηος ανά μονάδα παραγωγής

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Δομή ππογπάμμαηορ ζηη C++

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γεσηέρα 10 Ηοσνίοσ 2019 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΔΝΓΔΙΚΣΙΚΔ ΛΤΔΙ ΣΑ ΜΑΘΗΜΑΣΙΚΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ 2017

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

Master Class 3. Ο Ν.Ζανταρίδης προτείνει θέματα Μαθηματικών Γ Λσκειοσ ΘΕΜΑ 1.

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

(γ) Να βξεζεί ε ρξνλνεμαξηώκελε πηζαλόηεηα κέηξεζεο ηεο ζεηηθήο ηδηνηηκήο ηνπ ηειεζηή W.

x x x x tan(2 x) x 2 2x x 1

Πξνγξακκαηηζκόο Θ. Δπλακηθή Δηαρείξηζε Μλήκεο. Κσλζηαληίλνο Τζεξπέο. (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι)

Άσκηση 1 - Μοπυοποίηση Κειμένου

Πξνγξακκαηηζκόο Ι (ΗΥ120)

Αναφορές, είκτες και Αλφαριθμητικά

Οργάνωση και Δομή Παρουσιάσεων

ΑΡΥΔ ΟΙΚΟΝΟΜΙΚΗ ΘΔΩΡΙΑ ΛΤΔΙ ΓΙΑΓΩΝΙΜΑΣΟ ΚΔΦΑΛΑΙΟΤ 2

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

A. Αιιάδνληαο ηε θνξά ηνπ ξεύκαηνο πνπ δηαξξέεη ηνλ αγωγό.

Εξγαζηήξην Πιεξνθνξηθήο

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

ΑΕΠΠ 1o Επαναληπηικό Διαγώνιζμα

Σημεία Ασύπματηρ Ππόσβασηρ (Hot-Spots)

Επωηήζειρ Σωζηού Λάθοςρ ηων πανελλαδικών εξεηάζεων Σςναπηήζειρ

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Διαφορές μεταξύ αξιών και αναφορών #1

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

17TimeThis.h function returns reference pointer to same object { return *this; }

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Αντισταθμιστική ανάλυση

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ ΚΑΗ ΔΠΑΛ ΣΔΣΑΡΣΖ 25 ΜΑΨΟΤ 2016 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΑΡΥΔ ΟΗΚΟΝΟΜΗΚΖ ΘΔΧΡΗΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ - ΔΠΗΛΟΓΖ

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο.

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

Σημειώσεις δεύτερης εβδομάδας

ΠΛΗ36. Άσκηση 1. Άσκηση 2. Οη δηεπζύλζεηο ησλ 4 σλ ππνδηθηύσλ είλαη νη αθόινπζεο. Υπνδίθηπν Α: /27 Υπνδίθηπν Β:

Σύνθεζη ηαλανηώζεων. Έζησ έλα ζώκα πνπ εθηειεί ηαπηόρξνλα δύν αξκνληθέο ηαιαληώζεηο ηεο ίδηαο ζπρλόηεηαο πνπ πεξηγξάθνληαη από ηηο παξαθάησ εμηζώζεηο:

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

Transcript:

ΗΥ-150 Προγραμμαηιζμός Δείκηες (Pointers) (1/2) Πξνγξακκαηηζκόο

Δείθηεο Τη είλαη: ηύπνο κεηαβιεηώλ (όπσο integer) Τη απνζεθεύνπλ: ηελ δηεύζπλζε ζηε κλήκε άιισλ κεηαβιεηώλ Τη ρξεηάδνληαη: Κπξίσο, γηα δπλακηθή δηαρείξηζε κλήκεο θαη δπλακηθέο δνκέο δεδνκέλσλ Call-by-reference Σηελή ζρέζε κε ηνπο πίλαθεο Πεγή πνιιώλ ιαζώλ πνπ δύζθνια αληρλεύνληαη Πξνγξακκαηηζκόο 2

Δείθηεο int Counter = 7; int *PointerToCounter; Όλνκα Θέζε Μλήκεο Τηκή PointerToCounter = &Counter; Counter 231000 7 count 7 countptr count 7 PointerToCounter 234000 231000 Πξνγξακκαηηζκόο 3

Δήισζε Δεηθηώλ: Το * ρξεζηκνπνηείηαη γηα λα δειώζεη δείθηε int *myptr; Οξίδεη δείθηε ζε int (pointer of type int *) Δήισζε πνιιώλ κεηαβιεηώλ ηύπνπ δείθηε απαηηεί ηε ρξήζε ελόο * κπξνζηά από θάζε κία: int *myptr1, *myptr2; Μπνξνύκε λα δειώζνπκε δείθηε ζε νπνηνδήπνηε είδνο κεηαβιεηήο (αθόκα θαη άιιν δείθηε) double *myptr2; char **myptr2; Πξνγξακκαηηζκόο 4

Δήισζε Δεηθηώλ: Χξήζε ηνπ ραξαθηήξα * γηα ηε δήισζε int variable; /* declares an int variable */ int * variable; /* declares a pointer to an int */ int * variable[5]; /* declares an array of 5 pointers, to 5 ints */ void * variable; /* pointer to anything */ Πξνγξακκαηηζκόο

Τειεζηέο Δεηθηώλ &κεηαβιεηή q = &a; Επέζηξεςε ηελ δηεύζπλζε ζηελ νπνία είλαη απνζεθεπκέλε ε κεηαβιεηή *δείθηεο a = *q; Επέζηξεςε ηα πεξηερόκελα ηεο δηεύζπλζεο ζηελ νπνία δείρλεη ν δείθηεο Πξνγξακκαηηζκόο 6

Τειεζηέο Δεηθηώλ & (address operator) int y = 5; int *yptr; yptr = &y; // O yptr παίρνει ηην διεύθσνζη y yptr y 5 yptr 500000 600000 y 600000 5 Η διεύθυνζη ηου y είναι η ηιμή ηης yptr Πξνγξακκαηηζκόο 7

Τειεζηέο Δεηθηώλ * (indirection/dereferencing operator) int y = 5; int *yptr; yptr = &y; *yptr = *yptr * 2; Μπνξώ λα αιιάδσ ηελ ηηκή ησλ κεηαβιεηώλ κε ηε βνήζεηα δεηθηώλ Η ηηκή ηνπ y γίλεηαη ίζε κε 10 Η κεηαβιεηή y αιιάδεη ηηκή, ρσξίο ζηνλ θώδηθα λα θαίλεηαη απηό άκεζα ζε κηα εληνιή πνπ εκθαλίδεη ηελ y! H y δειαδή, απνθηά έλα «ςεπδώλπκν»: ην *yptr * θαη & είλαη αλάπνδα θαη αιιειναθπξώλνληαη Πξνγξακκαηηζκόο 8

Αλάζεζε δεηθηώλ Έλαο δείθηεο κπνξεί λα αλαηεζεί ζε άιιν δείθηε ίδηνπ ηύπνπ: int a = 4; int * p; p = &a; int * q = p; Η εληνιή int * q = p; νξίδεη ην q σο δείθηε ζε int θαη ηνπ δίλεη αξρηθή ηηκή ην p. Τα q θαη p δείρλνπλ ηελ ίδηα ζέζε κλήκεο θαη, άξα, *q θαη *p δείρλνπλ ζηελ ίδηα κεηαβιεηή (ε a). Πξνγξακκαηηζκόο 9

Αξρηθνπνίεζε δεηθηώλ Έλαο δείθηεο πνπ δελ ηνπ απνδνζεί αξρηθή ηηκή δείρλεη ζε ηπραία πεξηνρή κλήκεο. Η πξνζπέιαζε ζηελ ηπραία ζέζε κλήκεο απηή ζα πξνθαιέζεη ζθάικα εθηέιεζεο, αλ ε ζπγθεθξηκέλε ζέζε δελ έρεη δνζεί από ην ιεηηνπξγηθό ζύζηεκα ζην πξόγξακκά. Αλ έρεη δνζεί, θαη γξάςνπκε ζηε ζέζε κλήκεο απηή, ζα παλσγξάςνπκε άιιε δηθή καο κεηαβιεηή ρσξίο ζθάικα εθηέιεζεο. Σε έλα νπνηνδήπνηε δείθηε κπνξεί λα γίλεη απόδνζε ηεο ηηκήο 0. Τν 0 δελ απνηειεί αξηζκό ζέζεο κλήκεο θαη, επνκέλσο, ε αλάζεζε απηή ππνδειώλεη όηη ν δείθηεο δε δείρλεη ζε θαλέλα αληηθείκελν. Σε ηέηνην δείθηε (null pointer) ε δξάζε ηνπ (*) δελ επηηξέπεηαη (πξνθαιεί ιάζνο θαηά ηελ εθηέιεζε αιιά όρη θαηά ηε κεηαγιώηηηζε ηνπ πξνγξάκκαηνο). Η ζύγθξηζε ελόο άγλσζηνπ δείθηε (π.ρ. όξηζκα ζπλάξηεζεο) κε ην 0 πξέπεη λα πξνεγείηαη νπνηαζδήπνηε απόπεηξαο πξνζπέιαζεο ηεο ζέζεο κλήκεο ζηελ νπνία ζεσξνύκε όηη δείρλεη. Πξνζέμηε όηη ζε απηό ην ζεκείν ππάξρεη κία βαζηθή δηαθνξά κε ηελ αλαθνξά: έλαο δείθηεο κπνξεί λα κε ζπλδέεηαη κε θαλέλα αληηθείκελν ελώ, αληίζεηα, κία αλαθνξά είλαη νπσζδήπνηε ζπλδεδεκέλε κε θάπνηα πνζόηεηα. Πξνγξακκαηηζκόο 10

1 /* 2 Using the & and * operators */ 3 #include <iostream> 4 using namespace std; 5 int main() 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 */ 12 13 cout << "The address of a is << &a << endl << 14 "The value of aptr is << aptr ; 15 16 cout << endl << endl << The value of a is << a << endl << 17 The value of *aptr is << *aptr; 18 19 cout << endl << endl << Showing that * and & are inverses << 20 of each other.\n&*aptr = << &*a << endl << 21 *&aptr = << *&aptr ; 22 23 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

1 /* 2 Cube a variable using call-by-reference 3 with a pointer argument */ 4 5 #include <iostream> 6 using namespace std; 7 void cubebyreference( int * ); /* prototype */ 8 9 int main() 10 { 11 int number = 5; int *ptr = &number; D 12 fd 13 cout << "The original value of number is << number << endl; 14 cubebyreference( ptr ); 15 cout << The new value of number is << number << endl); 16 17 return 0; 18 } 19 20 void 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 that the function prototype takes a pointer to an integer (int *). 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). Πξνγξακκαηηζκόο

Sort κε ρξήζε ηεο Swap void swap( int *n1, int *n2) { int temp; } temp = *n1; *n1 = *n2; *n2 = temp; int x = 10, y=20; swap(&x,&y); Πξνγξακκαηηζκόο 13

1 /* Fig. 7.15: fig07_15.cpp 2 This program puts values into an array, sorts the values into 3 ascending order, and prints the resulting array. */ 4 #include <iostream> 5 #define SIZE 10 6 void bubblesort( int *, const int ); 7 void swap( int *, int * ); 8 int main() 9 { 10 11 int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 12 int i; 13 14 cout << "Data items in original order" << endl; 15 16 for ( i = 0; i < SIZE; i++ ) 17 printf( "%4d", a[ i ] ); 18 19 bubblesort( a, SIZE ); /* sort the array */ 20 cout << Data items in ascending order" << endl; 21 22 for ( i = 0; i < SIZE; i++ ) 23 cout << a[ i ] << ); 24 25 cout << endl; 26 27 return 0; 28 } 29 30 void 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.

33 int pass, j; 34 for ( pass = 0; pass < size - 1; pass++ ) 35 36 for ( j = 0; j < size - 1; j++ ) 37 38 if ( array[ j ] > array[ j + 1 ] ) 39 swap( &array[ j ], &array[ j + 1 ] ); 40 } 41 42 void swap( int *element1ptr, int *element2ptr ) 43 { 44 int hold = *element1ptr; 45 *element1ptr = *element2ptr; 46 *element2ptr = hold; 47 } Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 Πξνγξακκαηηζκόο

Αξηζκεηηθή Δεηθηώλ Σηνπο δείθηεο κπνξνύκε λα πξαγκαηνπνηνύκε αξηζκεηηθέο πξάμεηο: ++ ή - Ο δείθηεο δείρλεη ζην επόκελν ή πξνεγνύκελν ανηικείμενο, δει. αλ είλαη δείθηεο ζε αθέξαην ζηνλ επόκελν ή πξνεγνύκελν αθέξαην Αληίζηνηρα για + ή +=, - ή -= Οη δείθηεο κπνξνύλ λα αθαηξνύληαη ν έλαο από ηνλ άιιν Όιεο απηέο νη πξάμεηο δελ έρνπλ λόεκα εθηόο αλ πξαγκαηνπνηνύληαη πάλσ δείθηε πνπ δείρλεη ζηα ζηνηρεία ελόο πίλαθα Πξνγξακκαηηζκόο 16

Αξηζκεηηθή Δεηθηώλ Πίλαθαο 5 ζηνηρείσλ ηύπνπ int ζε κεραλή κε 4 byte ints int v[5]; int *vptr; vptr = &v[0] ή vptr = v; //δείρλεη ζην πξώην ζηνηρείν v[0] vptr += 2; //vptr ζην 3008 //vptr ζην 3000 vptr δείρλεη ζην v[ 2 ] (αύμεζε θαηά 2), κηα θαη ε κεραλή έρεη 4 byte ints, νπόηε δείρλεη 3008 location 3000 3004 3008 3012 3016 v[0] v[1] v[2] v[3] v[4] pointer variable vptr Πξνγξακκαηηζκόο 17

Σρέζε κεηαμύ πηλάθσλ θαη δεηθηώλ Σηνηρείν b[ 3 ] Μπνξνύκε λα ην πάξνπκε ζαλ *( bptr + 3 ) Σαλ bptr[ 3 ] bptr[ 3 ] == b[ 3 ] Με αξηζκεηηθή δεηθηώλ: *( b + 3 ) Πξνγξακκαηηζκόο 18

Δηεύζπλζε Πηλάθσλ θαη Δείθηεο int *a; a δείθηεο ζε αθέξαην Δεζκεύεηαη κλήκε κόλν γηα ηελ απνζήθεπζε ηνπ a (ηεο δηεύζπλζεο) Μπνξνύκε λα αιιάμνπκε ηελ δηεύζπλζε πνπ δείρλεη ν a int b[10]; b ζηαζεξή δηεύζπλζε (δείθηεο) ζε αθέξαην Δεζκεύεηαη κλήκε γηα 10 αθέξαηνπο Δελ κπνξνύκε λα αιιάμνπκε ηελ δηεύζπλζε ζηελ νπνία αληηζηνηρεί ν b Πξνγξακκαηηζκόο 19

Πίλαθεο θαη Δείθηεο Μπνξνύκε λα πεξλάκε δείθηεο ζε ζπλαξηήζεηο πνπ πεξηκέλνπλ πίλαθεο θαη αληίζηξνθα. Σε θάζε πεξίπησζε πεξλάκε απιώο κία δηεύζπλζε κλήκεο. Τν παξαθάησ γίλεηαη δεθηό: void f(int a[]); void q(int *b); int main() { int *c; int d[10]; f(c); q(d) } Πξνγξακκαηηζκόο 20

Παξάδεηγκα - ptrarithm2.c (Ι) int n[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 1}, *p, c; // First way to traverse the array cout << "First way to index the array. << endl; for (c=0; c < 10; c++) cout << "n[ << c << ] = << n[c] << endl; cout << Second way to index the array, through pointer arithmetic. << endl; for (c=0; c < 10; c++) cout << "n[ << c << ] = << *(n+c); Πξνγξακκαηηζκόο 21

Παξάδεηγκα - ptrarithm2.c (ΙΙ) cout << Third way to index the array, through pointers arithmetic. << endl; // We set the pointer to the beginning of the array p = n; for (c=0; c < 10; c++) cout << "n[ << c << ] = << *(p+c); cout << Fourth way to index the array, through pointers arithmetic. << endl; p = n; for (c=0 ; c < 10; c++) cout << "n[ << c << ] = << *(p++) << << p; Πξνγξακκαηηζκόο 22

Σύγθξηζε pointers Είλαη δπλαηή αλεμαξηήησλ πνπ δείρλνπλ. Έρεη λόεκα όηαλ δείρλνπλ ζε ζηνηρεία πίλαθα. Γίλεηαη κε ηνπο ηειεζηέο <, >, =, <= and >= Σύγθξηζε άζρεησλ κεηαμύ ηνπο pointers είλαη απξόβιεπηε. int data[100], *p1, *p2; for (int i = 0; i <100;i++) p1 = &data [1]; p2 = &data [2]; if (p1 > p2) else data[i] = i; cout<<"\n\n p1 is greater than p2"; cout<<"\n\n p2 is greater than p1"; Πξνγξακκαηηζκόο 23

ΗΥ-150 Προγραμμαηιζμός Δείκηες (Pointers) (2/2) Πξνγξακκαηηζκόο

Μεηαηξνπή Τύπσλ θαη Δείθηεο Ο ηύπνο ηνπ αληηθεηκέλνπ ζην νπνίν δείρλεη ν δείθηεο ρξεηάδεηαη γηα ηελ ζσζηή αξηζκεηηθή δεηθηώλ Όινη νη δείθηεο, αλεμάξηεηα ηνπ αληηθεηκέλνπ πνπ δείρλνπλ, απαηηνύλ ηελ ίδηα κλήκε γηα ηελ απνζήθεπζή ηνπο Η κεηαηξνπή ηύπσλ από έλα ηύπν δείθηε ζε άιιν ηύπν δείθηε δελ αιιάδεη ηα πεξηερόκελα ηνπ δείθηε: int *aptr; float *bptr; aptr = (int *)bptr; Πξνγξακκαηηζκόο 25

Παξαδείγκαηα types.c int main() { int *a; double *b; float *c; float (*d)[10]; float da[10]; } cout << "Size of a = << sizeof(a) << endl; cout << "Size of b = << sizeof(b) << endl; cout << "Size of c = << sizeof(c) << endl; cout << "Size of d = << sizeof(d) << endl; cout << "Size of *d = << sizeof(*d) << endl; cout << "Size of da = << sizeof(da) << endl; return 0; Πξνγξακκαηηζκόο 26

Παξαδείγκαηα int main() { int *a,n,array[10]; double *b; // Doing pointer arithmetic on a as an int * a = array; for (n=0; n < 10; n++) cout << "Address of a is << a++; cout << endl; } b = (double *)array; for (n=0; n < 10; n++) cout << "Address of b is << b++; return 0; Πξνγξακκαηηζκόο 27

Πίλαθεο από δείθηεο Έλαο πίλαθαο κπνξεί λα πεξηέρεη θαη δείθηεο Παξάδεηγκα: έλαο πίλαθαο από strings char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }; Πεξηέρεη δείθηεο ζηνλ 1 ν θάζε θνξά ραξαθηήξα char * θάζε ζηνηρείν ηνπ suit είλαη δείθηεο ζε char Τα strings ζηελ πξαγκαηηθόηεηα δελ απνζεθεύνληαη ζηνλ πίλαθα suit, κόλν δείθηεο απνζεθεύνληαη ζηνλ πίλαθα suit[0] H e a r t s \0 suit[1] suit[2] suit[3] D i a m o n d s \0 C l u b s \0 S p a d e s \0 Το suit έρεη ζηαζεξό κέγεζνο (σο πίλαθαο άιισζηε), αιιά ηα αιθαξηζκεηηθά κπνξνύλ λα έρνπλ όπνην κέγεζνο επηζπκνύκε Πξνγξακκαηηζκόο 28

Παξάδεηγκα: Αλαθάηεκα θαη κνίξαζκα ηξάπνπιαο Πξνγξακκαηηζκόο 29

1 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <time.h> 6 7 void shuffle( int [][ 13 ] ); 8 void deal( const int [][ 13 ], const char *[], const char *[] ); 9 10 int main() 11 { 12 const char *suit[ 4 ] = 13 { "Hearts", "Diamonds", "Clubs", "Spades" }; 14 const char *face[ 13 ] = 15 { "Ace", "Deuce", "Three", "Four", 16 "Five", "Six", "Seven", "Eight", 17 "Nine", "Ten", "Jack", "Queen", "King" }; 18 int deck[ 4 ][ 13 ] = { 0 }; 19 20 srand( time( 0 ) ); 21 22 shuffle( deck ); 23 deal( deck, face, suit ); 24 25 return 0; 26 } 27 28 void shuffle( int wdeck[][ 13 ] ) 29 { 30 int row, column, card; 31 Πξνγξακκαηηζκόο 32 for ( card = 1; card <= 52; card++ ) {

33 do { 34 row = rand() % 4; 35 column = rand() % 13; 36 } while( wdeck[ row ][ column ]!= 0 ); 37 38 wdeck[ row ][ column ] = card; 39 } 40 } 41 42 void deal( const int wdeck[][ 13 ], const char *wface[], 43 const char *wsuit[] ) 44 { 45 int card, row, column; 46 47 for ( card = 1; card <= 52; card++ ) 48 49 for ( row = 0; row <= 3; row++ ) 50 51 for ( column = 0; column <= 12; column++ ) 52 53 if ( wdeck[ row ][ column ] == card ) 54 printf( "%5s of %-8s%c", 55 wface[ column ], wsuit[ row ], 56 card % 2 == 0? '\n' : '\t' ); 57 57 } Πξνγξακκαηηζκόο card % 2 == 0? '\n' : '\t' ); The numbers 1-52 are randomly placed into the deck array showing the position of card wdeck[row][column]. Searches deck for the card number, then prints the face and suit.

Six of Clubs Ace of Spades Ace of Hearts Queen of Clubs Ten of Hearts Ten of Spades Ten of Diamonds Four of Diamonds Six of Diamonds Eight of Hearts Nine of Hearts Deuce of Spades Five of Clubs Deuce of Diamonds Five of Spades King of Diamonds Deuce of Hearts Ace of Clubs Three of Clubs Nine of Clubs Four of Hearts Eight of Diamonds Jack of Diamonds Five of Hearts Four of Clubs Jack of Clubs Seven of Diamonds Ace of Diamonds Queen of Diamonds Seven of Hearts Deuce of Clubs Three of Spades Four of Spades Ten of Clubs Six of Spades Three of Diamonds Three of Hearts Six of Hearts Eight of Clubs Eight of Spades King of Clubs Jack of Spades Queen of Hearts King of Spades King of Hearts Nine of Spades Queen of Spades Nine of Diamonds Seven of Clubs Five of Diamonds Jack of Hearts Seven of Spades Πξνγξακκαηηζκόο

Δείθηεο ζε ζπλαξηήζεηο Δείθηεο ζε ζπλάξηεζε Πεξηέρεη ηε δηεύζπλζε ηνπ θώδηθα ηεο ζπλάξηεζεο Όπσο έλαο δείθηεο δείρλεη ζην 1 ν ζηνηρείν ελόο πίλαθα Γηαηί; Πνιιέο θνξέο δελ μέξνπκε ηε ζπλάξηεζε ζέινπκε λα θαιέζνπκε, κέρξη λα ηξέμνπκε ην πξόγξακκα (π.ρ., αλ ε ζπλάξηεζε πνπ πξέπεη λα θαιέζνπκε θαζνξίδεηαη από ηελ είζνδν). Πνιιέο θνξέο πξνγξακκαηίδνπκε ή ρξεζηκνπνηνύκε ζπλαξηήζεηο βηβιηνζήθεο νη νπνίεο ρξεζηκνπνηνύλ άιιεο ππνζπλαξηήζεηο. Οη ηειεπηαίεο κπνξεί λα πξνκεζεύνληαη από ηνλ ρξήζηε ηεο βηβιηνζήθεο, ώζηε λα αιιάδνπλ ηελ ζπκπεξηθνξά ηεο ζπλάξηεζεο, ρσξίο λα ρξεηάδεηαη λα ηελ μαλακεηαγισηηίζνπκε. Απαξαίηεηεο πνιιέο θνξέο γηα θαηαλνεηό, επαλάγλσζην ή γξήγνξν θώδηθα. Απνθεύγνπκε ηηο πνιιέο if/switch Πξνγξακκαηηζκόο 33

Δείθηεο ζε ζπλαξηήζεηο Οη δείθηεο ζε ζπλαξηήζεηο Τα πεξλάκε ζαλ νξίζκαηα ζε ζπλαξηήζεηο Απνζεθεύνληαη ζε πίλαθεο Εθρσξνύληαη ζε άιινπο δείθηεο Διαθορά 1 από ηοσς σπόλοιποσς δείκηες: «πξόζβαζε» ζηα πεξηερόκελά ηνπο: *functionptr (*functionptr)(argument1, argument2) Σε απηήλ ηελ πεξίπησζε θαιείηαη ε ζπλάξηεζε ηεο νπνίαο ε δηεύζπλζε είλαη απνζεθεπκέλε ζηνλ δείθηε Διαθορά 2 από ηοσς σπόλοιποσς δείκηες: αλάζεζε δηεύζπλζεο κηαο ζπλάξηεζεο θαη όρη κεηαβιεηήο functionptr = &afunction; Πξνγξακκαηηζκόο 34

Δήισζε Δεηθηώλ ζε Σπλαξηήζεηο int (*funptr)(int, int) Ο ηύπνο ηεο κεηαβιεηήο funptr είλαη «δείθηεο ζε ζπλάξηεζε πνπ παίξλεη δύν νξίζκαηα ηύπνπ int, θαη επηζηξέθεη int. int *funptr(int, int) Απηό ζα ζήκαηλε, όηη ην funptr είλαη ηύπνπ «ζπλάξηεζε πνπ παίξλεη δύν νξίζκαηα ηύπνπ int, θαη επηζηξέθεη δείθηε ζε int) int (*funptrarray[10])(int, int)) Τππνο ηνπ funptrarray: πίλαθαο από 10 δείθηεο ζε ζπλαξηήζεηο πνπ παίξλνπλ δύν νξίζκαηα ηύπνπ int θαη επηζηξέθνπλ int Πξνγξακκαηηζκόο 35

Παξαδείγκαηα int function(int a, int b) { return a*b; } int main() { int (*funptr)(int, int); funptr = &function; } Δήισζε ηνπ δείθηε ζε ζπλάξηεζε Αλάζεζε ηεο δηεύζπλζεο κηαο ζπλάξηεζεο cout << Calling the function returns << (*funptr)(4, 5) << endl; return 0; Κιήζε ηεο ζπλάξηεζεο πνπ είλαη απνζεθεπκέλε ζηνλ δείθηε Πξνγξακκαηηζκόο 36

Παξάδεηγκα Θπκεζείηε όηη ε BubbleSort ηαμηλνκεί αθεξαίνπο βαζηδόκελε ζε ζπγθξίζεηο κεηαμύ ηνπο. Αιιάμηε ηελ BubbleSort ώζηε λα παίξλεη σο όξηζκα ηελ ζπλάξηεζε ζύγθξηζεο δύν αθεξαίσλ θαη λα ηελ ρξεζηκνπνηεί γηα ηαμηλόκεζε. Καιέζηε ηελ BubbleSort έηζη ώζηε λα ηαμηλνκεί αθεξαίνπο θαη θαηά αύμνληα ζεηξά θαη θαηά θζίλνπζα Πξνγξακκαηηζκόο 37

1 2 3 #include <stdio.h> 4 #define SIZE 10 5 void bubble( int [], const int, int (*)( int, int ) ); 6 int ascending( int, int ); 7 int descending( int, int ); 8 9 int main() 10 { 11 12 int order, 13 counter, 14 a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 15 16 cout << "Enter 1 to sort in ascending order, << 17 "Enter 2 to sort in descending order: ; 18 cin >> order ; 19 cout << endl << Data items in original order\n ; 20 21 for ( counter = 0; counter < SIZE; counter++ ) 22 cout << a[ counter ]; 23 24 if ( order == 1 ) { 25 bubble( a, SIZE, &ascending ); 26 cout << endl << Data items in ascending order << endl ; 27 } 28 else { 29 bubble( a, SIZE, &descending ); 30 cout << endl << Data items in descending order\n ; 31 } Πξνγξακκαηηζκόο 32 Notice the function pointer parameter.

33 for ( counter = 0; counter < SIZE; counter++ ) 34 cout << a[ counter ] ; 35 36 cout << endl; 37 38 return 0; 39 } 40 41 void bubble( int work[], const int size, 42 int (*compare)( int, int ) ) 43 { 44 int pass, count; 45 46 void swap( int *, int * ); 47 48 for ( pass = 1; pass < size; pass++ ) 49 50 for ( count = 0; count < size - 1; count++ ) 51 52 if ( (*compare)( work[ count ], work[ count + 1 ] ) ) 53 swap( &work[ count ], &work[ count + 1 ] ); 54 } 55 56 void swap( int *element1ptr, int *element2ptr ) 57 { 58 int temp; 59 60 temp = *element1ptr; 61 *element1ptr = *element2ptr; 62 *element2ptr = temp; 63 } Πξνγξακκαηηζκόο 64 ascending and descending return true or false. bubble calls swap if the function call returns true. Notice how function pointers are called using the dereferencing operator. The * is not required, but emphasizes that compare is a function pointer and not a function.

65 int ascending( int a, int b ) 66 { 67 return b < a; /* swap if b is less than a */ 68 } 69 70 int descending( int a, int b ) 71 { 72 return b > a; /* swap if b is greater than a */ 73 } 73 } Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 1 Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 2 Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in descending order 89 68 45 37 12 10 8 6 4 2 Πξνγξακκαηηζκόο