ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ
|
|
- Μενέλαος Αγγελοπούλου
- 1 χρόνια πριν
- Προβολές:
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.
ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ
ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ
ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 10η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση των τελεστών εισόδου και εξόδου. Τάξεις και δυναμική καταχώριση
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές
Συναρτήσεις-Διαδικασίες
ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 4 Συναρτήσεις-Διαδικασίες Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1 Διαδικασίες (procedures) Γνωστές και σαν υπορουτίνες (subroutines)
Προγραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διάλεξη 9: Δυναμική Δέσμευση Μνήμης
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 9: Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 9-1
Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )
ΤΕΛΕΣΤΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τι είναι οι τελεστές Χρήση τελεστών Υπερφόρτωση τελεστών Chain-linking Τελεστών Τελευταία ενημέρωση: Ιούνιος 2013 Εισαγωγή - 2 Τελεστής
int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι
Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Δομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4
ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 4 Διαδικασίες Ι Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Διευθυνσιοδότηση διακλαδώσεων
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον
Βασικά Στοιχεία της Java
Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά
Στοιχειώδης προγραμματισμός σε C++
Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών
Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος
ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 8η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προεπιλεγμένοι κατασκευαστές. Αντικείμενα και δυναμική καταχώριση μνήμης.
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 3η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πληροφορίες για την 1η εργασία. Οι τάξεις vector, set και map. Χρήση
Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )
ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία
Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών
Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε
Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"
Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
Υπερφόρτωση τελεστών
Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 6η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προκαθορισμένες τιμές ορισμάτων. Υπερφόρτωση συναρτήσεων. Συναρτήσεις
Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Βασικά Στοιχεία της Java
Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int
Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).
Δέσμευση Μνήμης (memory allocatio) Τι σημαίνει; Διαχείριση Μνήµης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ Πρώτα να δούμε τι ακριβώς συμπεριλαμβάνει μια μεταβλητή τύπος Καθορίζει το μέγεθος στην μνήμη σε Bytes τιμή Η αριθμητική τιμή που αποθηκεύεται στην
Περιεχόμενα. Πρόλογος... 21
Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31
Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),
Προγραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή
Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )
ΕΙΣΑΓΩΓΗ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Εισαγωγή στη C++ Ιστορικά στοιχεία για τη C/C++ Ένα βασικό πρόγραμμα Μεταγλώττιση ενός προγράμματος Τελευταία ενημέρωση: Σεπτέμβριος 2016
Πληροφορική 2. Γλώσσες Προγραμματισμού
Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση
Διαδικαστικός Προγραμματισμός
ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 7 ο : Δείκτες Στόχοι μαθήματος Να κατανοήσετε τη δυνατότητα χρήσης διευθύνσεων ως τιμών δεδομένων. Να μπορείτε να χρησιμοποιείτε
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
Περιεχόμενα. Πρόλογος... 17
Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 14η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Εικονικές μέθοδοι και πολυμορφισμός με χρήση δεικτών ή αναφορών. Εικονικοί
Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies Μαθήματα από το εργαστήριο Όταν η εκφώνηση σας ζητάει να φτιάξετε μία μέθοδο που παίρνει
Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Διαχείριση
Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Είδη καλουπωμάτων Μετατροπές και έλεγχοι τύπου Τελευταία ενημέρωση: Οκτώβριος 2013 Εισαγωγή - 2 Όπως και στη Java, στη C++
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης
Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5
ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 5 Διαδικασίες ΙI Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Κατανομή μνήμης Κείμενο
Προγραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός
«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ
«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές
Διάλεξη 5: Δείκτες και Συναρτήσεις
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο
Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -
! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
Δέσμευση Μνήμης! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Διαχείριση Μνήµης! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:! Για την αποδοτική δέσμευση
Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Προγραμματισμός Συστημάτων
MYY502 Προγραμματισμός Συστημάτων Β. Δημακόπουλος dimako@cse.uoi.gr http://www.cse.uoi.gr/~dimako Εργαστήρια Μάλλον (!) ξεκινούν την επόμενη εβδομάδα Εγγραφές στο εργαστήριο 2 βάρδιες, 15:00 17:00 και
Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών
Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία
Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23
Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική
ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί
5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή
(Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29 5. ΣΥΝΑΡΤΗΣΕΙΣ 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή Η συνάρτηση είναι void, δεν επιστρέφει κάποια τιµή. //Oρισµός συνάρτησης χωρίς παραµέτρους // 12.
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 11 η Συναρτήσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα
Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage
Εισαγωγή στον Προγραµµατισµό «C»
Εισαγωγή Στον Προγραµµατισµό «C» Δείκτες Πανεπιστήµιο Πελοποννήσου Τµήµα Επιστήµης & Τεχνολογίας Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Μνήµη Υπολογιστή Η µνήµη RAM (Random Access Memory) ενός υπολογιστή
Δομές δεδομένων (2) Αλγόριθμοι
Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student
Παράλληλη Επεξεργασία
Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed
Διαδικαστικός Προγραμματισμός
Διαδικαστικός Προγραμματισμός Ενότητα 7: Δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)
1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 4η 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα
Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά
Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object
1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version
1. Ξεκινώντας Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να περιγράψετε τα κύρια χαρακτηριστικά της γλώσσας Java Να περιγράψετε τη Java Virtual Machine Να περιγράψετε πώς λειτουργεί ο μηχανισμός «συλλογής
Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr
ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τύποι αρχείων Ρεύματα Άνοιγμα ρευμάτων Εγγραφή και ανάγνωση δεδομένων προς/από ένα ρεύμα Διαχείριση και κλείσιμο ρευμάτων Παραδείγματα
Εντολές εισόδου - εξόδου. Εισαγωγή στη C++
Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout
Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής
Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 3: Δείκτες (pointers) και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Αριθμητική Δεικτών - Δείκτες και Πίνακες - Παραδείγματα Διδάσκων: Παναγιώτης
Προγραμματισμός Δομές Δεδομένων
Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1
Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου
Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού
Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον