ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ"

Transcript

1 ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ Γεώργιος Παπαϊωάννου ( )

2 Περιγραφή: Εισαγωγή στους δείκτες Το μοντέλο της μνήμης, σωρός και στοίβα Αναφορές Δείκτες και πίνακες Δέσμευση και αποδέσμευση μνήμης Τελευταία ενημέρωση: Οκτώβριος 2015 Εισαγωγή - 2

3 Στη C++, έχουμε πρόσβαση στη διεύθυνση μιας μεταβλητής, την οποία και μπορούμε να αποθηκεύσουμε ως μεταβλητή κι αυτή (δείκτης): int a = 10; int * p_a = &a; *p_a = 12; Μνήμη (bytes):. &: Η διεύθυνση στη μνήμη μιας μεταβλητής int *: Μεταβλητή τύπου Δείκτη σε int (διεύθυνση μιας ποσότητας τύπου int) *p_a: Το περιεχόμενο μιας διεύθυνσης, ή αλλιώς τα δεδομένα που «δείχνει» ο δείκτης a (10) p_a (132) x00 0x00 0x00 0x0A 0x00 0x00 0x00 0x88 3

4 Για τους ίδιους λόγους που στη Java χρειάζομαι τις αναφορές (είναι το ίδιο πράγμα!). Ποιοι είναι αυτοί; Για να έχω τυχαία προσπέλαση στη μνήμη Για να έχω ορατότητα σε κοινόχρηστα δεδομένα χωρίς να τα αντιγράφω συνέχεια Για να διαχειρίζομαι αντικείμενα και συναρτήσεις σε χαμηλό επίπεδο (π.χ. δείκτες σε συναρτήσεις!) 4

5 int i = 5; cout << i; // Τυπώνει 5. cout << &i; // Τυπώνει τη διεύθυνση της i: 0x85AF. int* p = &i; // Δείκτης σε ακέραιο. cout << p; // Τυπώνει 0x85AF. cout << *p; // Τυπώνει 5. p i 0x85AF i 5 p *p = 6; // Αλλάζει το i. 0x85B3 0x85AF cout << i; // Τυπώνει 6. int j = 10; p = &j; // Τώρα το p δείχνει στο j. cout << *p; // Τυπώνει 10. p j 5

6 Ο δείκτες περιέχουν διευθύνσεις και άρα είναι φυσικοί αριθμοί! Άρα μπορώ να κάνω: Βασικές πράξεις μεταξύ αριθμών και δεικτών ή μεταξύ δεικτών (όποιες έχουν νόημα): +, -, +=, -=, ++, -- Συγκρίσεις δεικτών (δηλ. συγκρίσεις διευθύνσεων) Ο τύπος της μεταβλητής που δείχνει ένας pointer καθορίζει και το increment των αριθμητικών πράξεων: int a = 10; int * p_a = &a; p_a += 1; // ΔΕΝ ανεβαίνει κατά ένα byte, αλλά κατά ένα int (4 bytes) 6

7 Η άκυρη τιμή δείκτη είναι η μηδενική διεύθυνση: 0 \0 NULL nullptr (C++11) float * a = NULL; 7

8 Οι πίνακες είναι συνεχόμενες θέσεις μνήμης Ένας πίνακας Α, Ν στοιχείων ξεκινά από μια διεύθυνση βάσης (base pointer): &Α[0] == A (η διεύθυνση του πρώτου στοιχείου) Εκτείνεται για N X sizeof(type) bytes Ο τελεστής [i] είναι ισοδύναμος με «το περιεχόμενο στη θέση i»,δηλαδή: Α[i] = *(A+i) Α==&Α[0] sizeof(type) N 8

9 int arr[10]; bool b = (arr[2] == * (arr+2)); // true arr = arr + 1; Αυτό δεν είναι επιτρεπτό γιατί εδώ Ο arr είναι δηλωμένος ως σταθερός (arr[10]), άρα ναι μεν έχω πρόσβαση στη διεύθυνση αρχής, αλλά δε μπορώ να την αλλάξω 9

10 char buffer[80] = σκουλικομερμιγκότρυπα ; char *sub = buffer+8; cout << sub; // μερμιγκότρυπα for (int i = 0; i<=6; i++) buffer sub σ κ ο υ λ ι κ ο μ ε ρ μ ι γ κ ο τ ρ υ π α \0.. *(buffer+8+i) = *(buffer+16+i); // buffer[8+i] = buffer[16+i]; cout << buffer; // σκουλικοτρυπα buffer σ κ ο υ λ ι κ ο τ ρ υ π α \0 κ ο τ ρ υ π α \0.. 10

11 int arr[] = {1, 2, 3; int* arr = new int[3]; int* arr = {1, 2, 3; int arr[] = new int[3]; // Στατικός πίνακας. // Δυναμικός πίνακας. // Δεν επιτρέπεται. // Δεν επιτρέπεται. char s[] = "test"; // Στατικός πίνακας χαρακτήρων. char* s = "test"; // ΟΚ! Για συμβατότητα με τη C. char* s1; // Οι s και s1 θα δείχνουν στην s1 = "test"; // 1η θέση του πίνακα // χαρακτήρων "test". 11

12 char s[] = "test"; Στην πρώτη σειρά, η συμβολοσειρά αποθηκεύεται σε έναν πίνακα που εκχωρείται γι αυτό το σκοπό και που έχει ακριβώς το μέγεθος της. Μπορώ να έχω πρόσβαση και να αλλάξω τα περιεχόμενα του s Δε μπορώ να μεταβάλλω την τιμή του s (const char *) s t e s t 0 char* s = "test"; s t e s t 0 Στη δεύτερη σειρά, δημιουργείται ένας σταθερός πίνακας χαρακτήρων (readonly) και ένας δείκτης που απλά μας δείχνει στην πρώτη θέση του Δεν επιτρέπεται να μεταβάλω τα περιεχόμενα του test Μπορώ να μεταβάλω το δείκτη 12

13 Η sizeof μας δίνει το μέγεθος μιας μεταβλητής στη μνήμη Άρα για δείκτες μας δίνει πόσα bytes καταλαμβάνει η αναπαράσταση μιας διεύθυνσης: Για 32bit αρχιτεκτονικές είναι 4 Για 64bit αρχιτεκτονικές είναι 8 Παρατήρηση: char s[] = "test"; sizeof(s) == 5 // Το μέγεθος ενός σταθερού πίνακα 13

14 Πως μπορώ να φτιάξω έναν πίνακα από δείκτες; Πως μπορώ να έχω πρόσβαση στα στοιχεία του; Ποια χρήση έχει κάτι τέτοιο; 14

15 Συχνά, χρειάζεται να περνάμε δεδομένα σε περιοχές μνήμης χωρίς να ξέρουμε τον ακριβή τύπο τους Πότε; Όταν διαβάζουμε δεδομένα που τα προσπερνάμε ή τα μεταβιβάζουμε χωρίς να μας απασχολεί το περιεχόμενό τους (π.χ.network package data) Όταν θέλουμε να ορίσουμε παραμέτρους σε συναρτήσεις ή μεθόδους χωρίς να ξέρουμε τον ακριβή τύπο που θα περαστεί, αλλά μπορούμε να τον συμπεράνουμε εσωτερικά ( π.χ. void ThreadProcess(void *pdata) ) 15

16 Επειδή δεν έχει ακριβή τύπο το void *, οποιαδήποτε πράξη πάνω σε έναν τέτοιο δείκτη γίνεται με μονάδα το byte Τη μνήμη που δείχνει ένας δείκτης μπορώ να την καλουπώσω σε οτιδήποτε! char a[4] = {1,2,3,4; void * p_a = a; int b = *((int*)p_a); // copy // b == x01 0x02 0x03 0x

17 C++ Ο δείκτης είναι ισοδύναμος με τη διεύθυνση στη μνήμη μιας μεταβλητής και χρησιμεύει ως αναφορά σε αυτή, διαχωρίζοντάς τη από το περιεχόμενό της Java Υπάρχει μόνο η έννοια της «αναφοράς» σε αντικείμενα, που ισοδυναμεί με ένα δείκτη σε αντικείμενα στη C++ Αν δεν ξέρουμε τον τύπο ενός ορίσματος όταν δηλώνουμε μια συνάρτηση/μέθοδο, περνάμε απλά μια διεύθυνση μεταβλητής: void * Αν δεν ξέρουμε τον τύπο ενός ορίσματος όταν δηλώνουμε μια μέθοδο, περνάμε απλά μια αναφορά σε Object Εισαγωγή - 17

18 Κάθε πρόγραμμα όταν εκτελείται, δεσμεύει μνήμη σε δύο φάσεις: Στατικά (με την εκκίνηση) Δυναμικά (κατά την εκτέλεσή του) Στην αρχικοποίηση του προγράμματος δεσμεύεται κατευθείαν ο χώρος που είναι γνωστός από πριν: Χώρος για τον δυαδικό κώδικα μηχανής Χώρος για στατικές μεταβλητές Χώρος για την υπογραφή των κλάσεων κλπ Όλες οι μεταβλητές δεσμεύουν χώρο δυναμικά! 18

19 Κάθε πρόγραμμα δεσμεύει 5 τύπους χώρου μνήμης: Χώρος εκτελέσιμου δυαδικού κώδικα μηχανής (στατικός). Λέγεται code segment ή text segment (παρότι δεν είναι κείμενο!) Αρχικοποιημένος χώρος δεδομένων (data segment). Περιέχει στατικές μεταβλητές, υπογραφές κλασεων, global μεταβλητές (στατικός) Χώρος μη αρχικοποιημένων δεδομένων (BSS) Σωρός (heap), για δυναμική δέσμευση μνήμης (π.χ. με new) Στοίβα (call stack) για τις αυτόματες (τοπικές) μεταβλητές και τις παραμέτρους κλήσης συναρτήσεων 19

20 Ένα εκτελέσιμο αρχείο περιλαμβάνει, εκ κατασκευής από το μεταγλωττιστή και συνδέτη, όλη τη δυαδική πληροφορία του code segment και data segment Η δυαδική αναπαράσταση φορτώνεται στο χώρο (virtual memory space) που εκχωρείται από το λειτουργικό, ως έχει Η δυναμική περιοχή μνήμης δεν αποθηκεύεται στο αρχείο προφανώς, αλλά καθορίζεται και δεσμεύεται καθώς εκτελείται ο κώδικας 20

21 Μέγιστη εικονική διεύθυνση (κάτι μεγάλο, π.χ ) Environment variables Η στοίβα μεγαλώνει προς τα κάτω (μικρότερες διευθύνσεις x86 αρχιτεκτονικές) Ο σωρός δεσμεύεται κι αυξάνει προς τα πάνω (προς μεγαλύτερες διευθύνσεις μνήμης) Call stack Heap Uninitialized (global) data Initialized global data Εικονική μνήμη 0 Code segment 21

22 Κάθε φορά που καλείται μια συνάρτηση (ή μέθοδος), ακόμα και η main(), χρησιμοποιείται χώρος στην περιοχή της στοίβας κλήσεων συναρτήσεων (call stack ή σκέτο stack) Ο χώρος μνήμης της στοίβας χρησιμοποιείται αποκλειστικά γι αυτή τη χρήση Έχει πολύ απλό μηχανισμό (στοίβας ) για τη δέσμευση και αποδέσμευση (rewind) χώρου Αποθηκεύονται: Όλες οι τοπικές μεταβλητές μιας συνάρτησης Οι παράμετροι που περάστηκαν Το σημείο εξόδου και επαναφοράς στην καλούσα συνάρτηση (θέση μνήμης) 22

23 C++ Ο κώδικάς μου παράγει εκτελέσιμο που φορτώνεται όπως στο παραπάνω σχήμα και εκτελείται απευθείας πάνω στο λειτουργικό σύστημα Java Ο κώδικάς μου είναι στην ουσία τα «δεδομένα» ενός άλλου προγράμματος (JVM), γραμμένου σε C++ ( :D ) που αυτό τρέχει στο λειτουργικό μου σύστημα (*) H Java υλοποιεί στο χώρο μνήμης δεδομένων της, heap, stacks και code segments για τα threads των Java προγραμμάτων που εκτελούνται (*) Εισαγωγή - 23

24 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; Μετά το φόρτωμα του εκτελέσιμου exe path:= c:\temp\test.exe args = test.exe int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; Μεταγλώττιση, σύνδεση και φόρτωμα s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 24

25 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; Έναρξη εκτέλεσης exe path:= c:\temp\test.exe args = test.exe int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; PC s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 25

26 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; SP Κλήση της main() exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) data[2]:= {.1,.2 (8 bytes) int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; PC s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 26

27 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; SP PC Κλήση της Foo(float,floar) exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) data[2]:= {.1,.2 (8 bytes) Παράμετροι της Foo() (8 bytes) Διεύθυνση επιστροφής (&(data[0])) Διεύθυνση καλούντος (παλιός PC) c (4 bytes) s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 27

28 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; SP Επιστροφή από τη Foo(float,float) exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) data[2]:= {.1,.2 (8 bytes) int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; PC s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 28

29 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; SP PC Κλήση της ostream::<<(float) exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) data[2]:= {.1,.2 (8 bytes) Παράμετροι της <<() (4 bytes) Διεύθυνση επιστροφής (-) Διεύθυνση καλούντος (παλιός PC) Τοπικές μεταβλητές της cout s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 29

30 static int s_f = 3.1f; float Foo(float a, float b) { float c = a+b; return c*c; SP Επιστροφή από τη <<(float) exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) data[2]:= {.1,.2 (8 bytes) int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; PC s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 30

31 static int s_f = 3.1f; Επιστροφή στην καλούσα διεργασία exe path:= c:\temp\test.exe args = test.exe float Foo(float a, float b) { float c = a+b; return c*c; SP int main() { float data[] = {.1f,.2f; data[0] = Foo(data[1], s_f); cout << data[0]; return 0; PC s_f := 3.1 cout main() machine code Foo() machine code osteam::<<() machine code 31

32 Προσοχή: Για λόγους ταχύτητας, στη C++ και στη C δεν αποδίδονται τυπικές τιμές κατά τη δήλωση μεταβλητών. Εμείς είμαστε υπεύθυνοι για την απόδοση αρχικής τιμής int c; cout << c; // (0xcccccccc) : σκουπίδια Γιατί; Αν η μεταβλητή θα υποδεχθεί ένα αποτέλεσμα ή μία ανάθεση αργότερα δεν υπάρχει λόγος να εκτελεστεί η αρχικοποίηση της σε μια τιμή που ποτέ δε θα χρησιμοποιηθεί 32

33 Είδαμε ότι οι τοπικές μεταβλητές δεσμεύονται σε κάθε stack frame κλήσης μιας συνάρτησης. Όταν η συνάρτηση επιστρέφει, τα δεδομένα αυτά χάνονται Συχνά δεν είμαστε σε θέση να προσδιορίσουμε από την αρχή το μέγεθος ή και τον ακριβή τύπο πινάκων και δεδομένων (βλ. πίνακες και κληρονομικότητα) Θέλουμε να δεσμεύσουμε μεταβλητές σε χώρο που να έχουν πρόσβαση πολλές συναρτήσεις/μέθοδοι/νήματα Θέλουμε να δημιουργήσουμε μη συνεκτικά δεδομένα στη μνήμη (συνδεδεμένες λίστες, όχι πίνακες) Θέλουμε να δεσμεύσουμε μεγάλη ποσότητα μνήμης, που δε γίνεται να μπει σε ένα frame (stack overflow) 33

34 Είναι το διάστημα μνήμης που το πρόγραμμά μας μπορεί να δεσμεύσει χώρο για δεδομένα δυναμικά Είναι ξεχωριστός από το χώρο των αυτόματων μεταβλητών (call stack) Η δέσμευση χώρου γίνεται με την εντολή new στη C++ (όπως και στη Java) Τη μνήμη που δεσμεύουμε, πρέπει να την αποδεσμεύουμε εμείς με την εντολή delete ΔΕΝ υπάρχει garbage collection στη C++ (*) (*) Υπάρχει υποστήριξη μέσω βιβλιοθηκών (π.χ. auto_ptr) για δείκτες που καταστρέφονται μόνοι τους, αλλά αυτό έχει πολυπλοκότητα και κόστος (όπως και στη Java!) 34

35 float* fp = new float; // Δημιουργία νέου χώρου // αποθήκευσης για μία τιμή float *fp = 2.0F; // Ανάθεση τιμής float στο // περιεχόμενο του fp cout << fp << endl // Τυπώνει 0xFF10 (διεύθυνση) << *fp << endl; // Τυπώνει 2 (τιμή) delete fp; // Αποδέσμευση του χώρου στον // οποίο δείχνει o fp Σε αυτή την περίπτωση ο δείκτης δεν δείχνει στο χώρο μιας άλλης μεταβλητής, αλλά σε χώρο που δημιουργήσαμε με new 35

36 Για απλούς τύπους (float, int κλπ), δεσμεύουν και αποδεσμεύουν μνήμη Για κλάσεις (με αυτή τη σειρά): new: Δεσμεύει μνήμη, όση χρειάζεται για να αποθηκευτεί ένα στιγμιότυπο Καλεί τον κατασκευαστή της κλάσης delete: Καλεί τον καταστροφέα της κλάσης Αποδεσμεύει τη μνήμη που είχε εκχωρηθεί 36

37 Για να δεσμεύσουμε μια ακολουθία από ίδιου τύπου δεδομένα χρησιμοποιούμε τον τελεστή new[]: float array* = new float[num]; Και για να διαγράψουμε τον πίνακα στοιχείων αυτόν χρησιμοποιούμε την delete[]: delete[] array; 37

38 int a[5]; // Στατική καταχώριση χώρου για πίνακα. int* b = new int[5]; // Δυναμική καταχώριση χώρου για πίνακα. a[4] = 10; b[4] = 10; *a = 2; // Ισοδύναμο του a[0] = 2. *b = 2; // Ισοδύναμο του b[0] = 2. *(a + 1) = 4; // Ισοδύναμο του a[1] = 4. *(b + 1) = 4; // Ισοδύναμο του b[1] = 4. b = a; // Δεν είναι λάθος, χάσαμε όμως τη διεύθυνση του // δυναμικού πίνακα. Πώς θα κάνουμε delete[]; int* c = a; // Τα ονόματα πινάκων είναι ουσιαστικά δείκτες. a = b; // Τα ονόματα πινάκων είναι δείκτες που δεν // επιτρέπεται να δείξουν αλλού. 38

39 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) char *:=?? (4 bytes) int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; 39

40 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str :=?? (4 bytes) Παράμετροι της CreateData() (4 bytes) Διεύθυνση επιστροφής (&str) Διεύθυνση καλούντος (PC main) data :=?? (4 bytes) 40

41 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; data Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str :=?? (4 bytes) Παράμετροι της CreateData() (4 bytes) Διεύθυνση επιστροφής (&str) Διεύθυνση καλούντος (PC main) data := 0x (4 bytes) 0x Heap $^ &*^&G>Γ 41

42 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; data Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str :=?? (4 bytes) Παράμετροι της CreateData() (4 bytes) Διεύθυνση επιστροφής (&str) Διεύθυνση καλούντος (PC main) data := 0x (4 bytes) 0x Heap \0\0\0\0\0\0\0\0\0\0 42

43 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; str data Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str := 0x (4 bytes) Παράμετροι της CreateData() (4 bytes) Διεύθυνση επιστροφής (&str) Διεύθυνση καλούντος (PC main) data := 0x (4 bytes) 0x Heap \0\0\0\0\0\0\0\0\0\0 43

44 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str := 0x (4 bytes) int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; str 0x Heap \0\0\0\0\0\0\0\0\0\0 44

45 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str := 0x (4 bytes) int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; str 0x Heap A\0\0\0\0\0\0\0\0\0 45

46 char * CreateData(int num) { char * data = new char[num]; for (int i=0; i<num; i++) data[i] = '\0'; return data; Stack exe path:= c:\temp\test.exe args = test.exe Παράμετροι της main() (0 bytes) Διεύθυνση επιστροφής (στο OS) Διεύθυνση καλούντος (OS) str :=???? (4 bytes) int main() { char * str = CreateData(10); str[0] = A ; cout << str; delete[] str; return 0; Heap Δεν ξεχνάμε να καλέσουμε τη delete, αλλιώς η μνήμη δε θα αποδεσμευθεί! (Memory leak) 46

47 Η μνήμη των αυτόματων μεταβλητών, δηλαδή των τοπικών μεταβλητών μέσα στο σώμα μιας συνάρτησης ή μεθόδου, διαγράφεται μόνη της με την επιστροφή της συνάρτησης (επιστρέφει ο Stack Pointer στην παλιά του τιμή) Η μνήμη που δεσμεύουμε στο σωρό παραμένει δεσμευμένη και μετά την επιστροφή της συνάρτησης 47

48 #include <iostream> using namespace std; int main() { unsigned howmany; cin >> howmany; int* storage = new int[howmany]; for(unsigned i = 0; i < howmany; i++) { cin >> storage[i]; for(unsigned i = 0; i < howmany; i++) { cout << i << ": " << storage[i] << endl; delete[] storage; 48

49 const int i2 = 10; X int* p2 = &i2; // Θα μπορούσα να αλλάξω το i2 // μέσω του p2, με *p2 = 20. const int* p3 = &i2; // OK. Υπόσχομαι να μην αλλάξω // αυτό στο οποίο δείχνει ο p3. cout << *p3; // OK. Τυπώνει 10. X *p3 = 20; // Δεν επιτρέπεται. Δείκτης σε const. int i1 = 10; // Το i1 δεν είναι σταθερά. const int* p4 = &i1; // Επιτρέπεται, αλλά δεν μπορώ να // αλλάξω το i1 μέσω του p4. i1 = 20; // OK. X *p4 = 20; // Δεν επιτρέπεται. 49

50 int j1 = 10, j2 = 20; int* const p5 = &j1; // Σταθερός δείκτης στο j1. *p5 = 30; // ΟΚ, αλλάζει το j1. X p5 = &j2; // Ο p5 δεν μπορεί να δείξει αλλού. const int* const p6 = &j1; // Σταθερός δείκτης σε // σταθερά. X p6 = &j2; // Ο p6 είναι σταθερός: δεν // μπορεί να δείξει αλλού. X *p6 = 30; // Ο p6 δείχνει σε σταθερά: // δεν μπορεί να αλλάξει τα // περιεχόμενα της θέσης // μνήμης στην οποία δείχνει. 50

51 Η αντίστοιχη δέσμευση / αποδέσμευση μνήμης μπορεί να γίνει με τις συναρτήσεις της C: void * malloc(num_bytes) και void free(void *): float data = (float*) malloc( 10*sizeof(float) ); free (data); ΠΟΤΕ δεν αναμιγνύουμε τη new με την free και την malloc με την delete (είναι σφάλμα) 51

52 Ένας δείκτης (διεύθυνση), ως μεταβλητή απαιτεί κάποιο χώρο αποθήκευσης, π.χ. 32bits Το μέγεθος του δείκτη μπορούμε να το πάρουμε κι αυτό με τη sizeof: π.χ. sizeof(float*) ΔΕΝ πρέπει να υποθέτουμε μόνοι μας ποτέ πόσο είναι το μέγεθος του pointer γιατί αλλάζει μεταξύ αρχιτεκτονικών (π.χ. στη x64 είναι 64bits) 52

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 10η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση των τελεστών εισόδου και εξόδου. Τάξεις και δυναμική καταχώριση

Διαβάστε περισσότερα

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

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

Διαβάστε περισσότερα

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

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( ) ΤΕΛΕΣΤΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τι είναι οι τελεστές Χρήση τελεστών Υπερφόρτωση τελεστών Chain-linking Τελεστών Τελευταία ενημέρωση: Ιούνιος 2013 Εισαγωγή - 2 Τελεστής

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

Συναρτήσεις-Διαδικασίες

Συναρτήσεις-Διαδικασίες ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 4 Συναρτήσεις-Διαδικασίες Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1 Διαδικασίες (procedures) Γνωστές και σαν υπορουτίνες (subroutines)

Διαβάστε περισσότερα

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 9: Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 9-1

Διαβάστε περισσότερα

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4 ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 4 Διαδικασίες Ι Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Διευθυνσιοδότηση διακλαδώσεων

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

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

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 8η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προεπιλεγμένοι κατασκευαστές. Αντικείμενα και δυναμική καταχώριση μνήμης.

Διαβάστε περισσότερα

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 3η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πληροφορίες για την 1η εργασία. Οι τάξεις vector, set και map. Χρήση

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

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

Εισαγωγή στη γλώσσα προγραμματισμού C++ Εισαγωγή στη γλώσσα προγραμματισμού C++ Περιβάλλον Εργασίας 2 Περιβάλλον Εργασίας 1. Χρήση απλού κειμενογράφου και Μεταγλωττιστή 2. Ολοκληρωμένα Περιβάλλοντα Εργασίας (Integrated Development Environments)

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

Υπερφόρτωση τελεστών

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ Πρώτα να δούμε τι ακριβώς συμπεριλαμβάνει μια μεταβλητή τύπος Καθορίζει το μέγεθος στην μνήμη σε Bytes τιμή Η αριθμητική τιμή που αποθηκεύεται στην

Διαβάστε περισσότερα

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

Διαβάστε περισσότερα

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 6η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προκαθορισμένες τιμές ορισμάτων. Υπερφόρτωση συναρτήσεων. Συναρτήσεις

Διαβάστε περισσότερα

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... 21

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

Διαβάστε περισσότερα

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks). Δέσμευση Μνήμης (memory allocatio) Τι σημαίνει; Διαχείριση Μνήµης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:

Διαβάστε περισσότερα

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

Διαβάστε περισσότερα

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int

Διαβάστε περισσότερα

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

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 10 η Διάλεξη C++ - Πίνακες Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ανακεφαλαίωση Κατά την κλήση μιας συνάρτησης κατ αξία οι τιμές των ορισμάτων αντιγράφονται στις αντίστοιχες τυπικές παραμέτρους

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

Διαβάστε περισσότερα

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( ) ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

Διαβάστε περισσότερα

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( ) ΕΙΣΑΓΩΓΗ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Εισαγωγή στη C++ Ιστορικά στοιχεία για τη C/C++ Ένα βασικό πρόγραμμα Μεταγλώττιση ενός προγράμματος Τελευταία ενημέρωση: Σεπτέμβριος 2016

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1 Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής

Διαβάστε περισσότερα

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

Διαδικαστικός Προγραμματισμός ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 7 ο : Δείκτες Στόχοι μαθήματος Να κατανοήσετε τη δυνατότητα χρήσης διευθύνσεων ως τιμών δεδομένων. Να μπορείτε να χρησιμοποιείτε

Διαβάστε περισσότερα

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

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT = Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Δεκέμβριος 2018 1/18 = 2/18 = 1 αντικειμένων Μέθοδοι αντιγράφου (copy constructor) Κατασκευή μέσω

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

Διαβάστε περισσότερα

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

Διαβάστε περισσότερα

Προγραμματισμός Συστημάτων

Προγραμματισμός Συστημάτων MYY502 Προγραμματισμός Συστημάτων Β. Δημακόπουλος dimako@cse.uoi.gr http://www.cse.uoi.gr/~dimako Εργαστήρια Μάλλον (!) ξεκινούν την επόμενη εβδομάδα Εγγραφές στο εργαστήριο 2 βάρδιες, 15:00 17:00 και

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 14η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Εικονικές μέθοδοι και πολυμορφισμός με χρήση δεικτών ή αναφορών. Εικονικοί

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies Μαθήματα από το εργαστήριο Όταν η εκφώνηση σας ζητάει να φτιάξετε μία μέθοδο που παίρνει

Διαβάστε περισσότερα

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

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία

Διαβάστε περισσότερα

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ «ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

Διαβάστε περισσότερα

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29 5. ΣΥΝΑΡΤΗΣΕΙΣ 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή Η συνάρτηση είναι void, δεν επιστρέφει κάποια τιµή. //Oρισµός συνάρτησης χωρίς παραµέτρους // 12.

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες Δέσμευση Μνήμης! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Διαχείριση Μνήµης! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:! Για την αποδοτική δέσμευση

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2) Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2) Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης. Οι

Διαβάστε περισσότερα

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5 ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 5 Διαδικασίες ΙI Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Κατανομή μνήμης Κείμενο

Διαβάστε περισσότερα

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Είδη καλουπωμάτων Μετατροπές και έλεγχοι τύπου Τελευταία ενημέρωση: Οκτώβριος 2013 Εισαγωγή - 2 Όπως και στη Java, στη C++

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται

Διαβάστε περισσότερα

HY150a Φροντιστήριο 3 24/11/2017

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

Διαβάστε περισσότερα

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή

Διαβάστε περισσότερα

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

Διαβάστε περισσότερα

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1 Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος

Διαβάστε περισσότερα

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε βάση

Διαβάστε περισσότερα