ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ ΕΝΤΟΛΕΣ - ΥΠΟΔΕΙΞΕΙΣ Δείκτες int *p; /* Δήλωση Δείκτη */ int i = 3; p = &i; /* Ο Δείκτης δείχνει στον ακέραιο i */ *p = 5; /* To περιεχόμενο του δείκτη p είναι 5 */ printf( %d %d, *p, i); Η printf τυπώνει 5 5. & Διαβάστε η διεύθυνση του * Διαβάστε το περιεχόμενο του * int int * int int p: i: 3 p: i: 5 Ασκηση 1 Να γράψετε τι θα τυπώσουν οι εντολές εκτύπωσης του παρακάτω προγράμματος ΧΩΡΙΣ να εκτελέσετε το πρόγραμμα int *ptr_a, *ptr_b; int num_c = 4, num_d = 7; ptr_a = &num_c; ptr_b = ptr_a; ptr_b = &num_d; *ptr_a = *ptr_b; printf ("%d %d\n", num_c, num_d);
The output of this program is: 4 4 4 7 7 7 7 7 Ασκηση 2. Δηλώστε ένα πίνακα τύπου int με το όνομα values και με 5 στοιχεία και δώστε αρχικές τιμές στα στοιχεία τους ζυγούς ακεραίους από το 2 έως το 10. Ορίστε το μέγεθος του πίνακα ως σταθερά SIZE. Δηλώστε ένα δείκτη vptr που δείχνει σε ένα αντικείμενο τύπου int Προβάλλετε τα στοιχεία του πίνακα values χρησιμοποιώντας σημειολογία δεικτών θέσης πίνακα Χρησιμοποιείστε 2 διαφορετικούς τρόπους για να εκχωρείστε την διεύθυνση έναρξης του πίνακα values στην μεταβλητή δείκτη vptr. Προβάλλετε τα στοιχεία του πίνακα values χρησιμοποιώντας σημειολογία δείκτη μετατόπισης Προβάλλετε τα στοιχεία του πίνακα values χρησιμοποιώντας σημειολογία δείκτη μετατόπισης με το όνομα του πίνακα ως δείκτη. Αναφερθείτε στο στοιχείο 5 του πίνακα values χρησιμοποιώντας σημειολογία δεικτών θέσης πίνακα, σημειολογία δείκτη μετατόπισης με το όνομα του πίνακα ως δείκτη, και σημειολογία δείκτη μετατόπισης #define SIZE 5 /*const int SIZE=5; */ int values[size] = 2,4,6,8,10; int i, *vptr; printf("%d\n", values[i]); vptr= values; or vptr= &values[0]; printf("%d\n", *(values +i));
printf("%d\n", *(vptr +i)); Ασκηση 3 Να δημιουργηθεί πρόγραμμα στο οποίο ορίζονται δύο μεταβλητές number1, number1 με τύπο floating point. Το number1 αρχικοποιείται στην τιμή 7.3. Δημιούργησε μια μεταβλητή δείκτη fptr που να δείχνει σε ένα αντικείμενο τύπου float. Να καταχωρηθεί η διεύθυνση της μεταβλητής number1 στον δείκτη fptr. Να καταχωρηθεί η τιμή του αντικειμένου στο οποίο δείχνει ο δείκτης fptr στην μεταβλητή number2. Τυπώστε την τιμή της μεταβλητής number2 με ένα δεκαδικό ψηφίο. Να τυπωθεί η διεύθυνση της μεταβλητής number1 χρησιμοποιώντας το %p. Nα τυπωθεί η διεύθυνση που είναι καταχωρημένη στην μεταβλητή fptr. Είναι η ίδια με την διεύθυνση της μεταβλητής number1; float number1, number2; number1=7.3; float *fptr; fptr=&number1; number2=*fptr; printf(" H timi tis metavlitis number2 einai %.1f\n", number2); printf ("I diefthinsi tis metavlitis number1 einai %p\n", &number1); printf ("i diefthinsi pou einai kataxorimeni ston deikti fptr einai %p\n", fptr); printf ("I diefthinsi tis metavlitis number2 einai %p\n", &number2); Ασκηση 4 Να γίνει πρόγραμμα που: 1. Θα ζητάει 30 αριθμούς και θα τους εισάγει σε πίνακα 2. Θα βρίσκει και θα εμφανίζει τον μεγαλύτερο. Και οι δύο λειτουργίες θα γίνονατι με συναρτήσεις που θα καλούνται από την main. H εισαγωγή των αριθμών θα γίνεται με την συνάρτηση enterarray και η εύρεση του μεγαλύτερου θα γίνεται με την συνάρτηση maxofarray.
με δείκτες #define SIZE 30 void enterarray(int *); int maxofarray(int *); int *arrptr; int pinakas[size],megaliteros; arrptr = pinakas; enterarray(arrptr); printf("megaliteros einai o %d\n", maxofarray(arrptr)); void enterarray(int *arrayp) int i; for(i = 0; i < SIZE; i++) printf("doste ena akeraio > "); scanf("%d", (arrayp +i)); int maxofarray(int *arrayp) int max,i; max = *arrayp; for(i = 1; i < SIZE; i++) if(*(arrayp +i) > max) max = *(arrayp +i); return max; ΧΩΡΙΣ δείκτες #define SIZE 4 void enterarray(int pinakas[], int megeth); int maxofarray(int pinakas[], int megeth); int pinakas[size],megaliteros; enterarray(pinakas, SIZE);
printf("megaliteros einai o %d\n", maxofarray(pinakas, SIZE)); void enterarray(int pinakas[],int megeth) int i; for(i = 0; i < megeth; i++) printf("doste ena akeraio > "); scanf("%d", &pinakas[i]); int maxofarray(int pinakas[],int megeth) int max,i; max = pinakas[0]; for(i = 1; i < megeth; i++) if( pinakas[i] > max) max = pinakas[i]; return max;