ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ
|
|
- Μενέλαος Αγγελοπούλου
- 7 χρόνια πριν
- Προβολές:
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++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με 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 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Διαβάστε περισσότεραΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ
ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 10η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση των τελεστών εισόδου και εξόδου. Τάξεις και δυναμική καταχώριση
Διαβάστε περισσότεραΑναφορές, είκτες και Αλφαριθμητικά
Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ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]; Προγραµµατισµός Ι
Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι
Διαβάστε περισσότεραΣυναρτήσεις-Διαδικασίες
ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 4 Συναρτήσεις-Διαδικασίες Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1 Διαδικασίες (procedures) Γνωστές και σαν υπορουτίνες (subroutines)
Διαβάστε περισσότεραΔιάλεξη 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) 1 Διευθυνσιοδότηση διακλαδώσεων
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΔιάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Διαβάστε περισσότεραΒασικά Στοιχεία της Java
Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά
Διαβάστε περισσότεραΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών
Διαβάστε περισσότεραΣτοιχειώδης προγραμματισμός σε C++
Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 8η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προεπιλεγμένοι κατασκευαστές. Αντικείμενα και δυναμική καταχώριση μνήμης.
Διαβάστε περισσότεραΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης
Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 3η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πληροφορίες για την 1η εργασία. Οι τάξεις vector, set και map. Χρήση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον
Διαβάστε περισσότεραΕισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαβάστε περισσότεραΕισαγωγή στη γλώσσα προγραμματισμού C++
Εισαγωγή στη γλώσσα προγραμματισμού C++ Περιβάλλον Εργασίας 2 Περιβάλλον Εργασίας 1. Χρήση απλού κειμενογράφου και Μεταγλωττιστή 2. Ολοκληρωμένα Περιβάλλοντα Εργασίας (Integrated Development Environments)
Διαβάστε περισσότεραΠρογραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Διαβάστε περισσότεραΥπερφόρτωση τελεστών
Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας
Διαβάστε περισσότεραΔομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος
ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ Πρώτα να δούμε τι ακριβώς συμπεριλαμβάνει μια μεταβλητή τύπος Καθορίζει το μέγεθος στην μνήμη σε Bytes τιμή Η αριθμητική τιμή που αποθηκεύεται στην
Διαβάστε περισσότεραΠίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"
Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό
Διαβάστε περισσότεραΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 6η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προκαθορισμένες τιμές ορισμάτων. Υπερφόρτωση συναρτήσεων. Συναρτήσεις
Διαβάστε περισσότεραChapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΒασικά Στοιχεία της Java
Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της
Διαβάστε περισσότεραΠεριεχόμενα. Πρόλογος... 21
Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31
Διαβάστε περισσότεραΤι σημαίνει; 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 αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int
Διαβάστε περισσότερα10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ
10 η Διάλεξη C++ - Πίνακες Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ανακεφαλαίωση Κατά την κλήση μιας συνάρτησης κατ αξία οι τιμές των ορισμάτων αντιγράφονται στις αντίστοιχες τυπικές παραμέτρους
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΔιάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός
Διαβάστε περισσότεραΠληροφορική 2. Γλώσσες Προγραμματισμού
Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
Διαβάστε περισσότεραΣυμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )
ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών
Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε
Διαβάστε περισσότεραΕισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )
ΕΙΣΑΓΩΓΗ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Εισαγωγή στη C++ Ιστορικά στοιχεία για τη C/C++ Ένα βασικό πρόγραμμα Μεταγλώττιση ενός προγράμματος Τελευταία ενημέρωση: Σεπτέμβριος 2016
Διαβάστε περισσότεραΠρογραμματισμός Ι (HY120)
Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται
Διαβάστε περισσότεραΔυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
Διαβάστε περισσότεραΔιαδικαστικός Προγραμματισμός
ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 7 ο : Δείκτες Στόχοι μαθήματος Να κατανοήσετε τη δυνατότητα χρήσης διευθύνσεων ως τιμών δεδομένων. Να μπορείτε να χρησιμοποιείτε
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
= Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Δεκέμβριος 2018 1/18 = 2/18 = 1 αντικειμένων Μέθοδοι αντιγράφου (copy constructor) Κατασκευή μέσω
Διαβάστε περισσότεραΠρογραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη
Διαβάστε περισσότεραΠεριεχόμενα. Πρόλογος... 17
Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για
Διαβάστε περισσότεραΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες
Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15
Διαβάστε περισσότερα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++ ( 2012-13 ) 14η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Εικονικές μέθοδοι και πολυμορφισμός με χρήση δεικτών ή αναφορών. Εικονικοί
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies Μαθήματα από το εργαστήριο Όταν η εκφώνηση σας ζητάει να φτιάξετε μία μέθοδο που παίρνει
Διαβάστε περισσότεραΔιάλεξη 5: Δείκτες και Συναρτήσεις
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο
Διαβάστε περισσότεραΠρογραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών
Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία
Διαβάστε περισσότερα«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ
«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
Διαβάστε περισσότερα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) Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης. Οι
Διαβάστε περισσότεραΔιαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5
ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 5 Διαδικασίες ΙI Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Κατανομή μνήμης Κείμενο
Διαβάστε περισσότεραΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Είδη καλουπωμάτων Μετατροπές και έλεγχοι τύπου Τελευταία ενημέρωση: Οκτώβριος 2013 Εισαγωγή - 2 Όπως και στη Java, στη C++
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΠρογραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Διαβάστε περισσότεραHY150a Φροντιστήριο 3 24/11/2017
HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει
Διαβάστε περισσότεραΑ' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή
Διαβάστε περισσότεραΠεριεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23
Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική
Διαβάστε περισσότεραΜνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1
Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος
Διαβάστε περισσότεραΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε βάση
Διαβάστε περισσότερα