ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

...ασύγχρονα μαθήματα γλώσσας C

ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό linuxs » 23 Μαρ 2011, 22:39

ΚΕΦΑΛΑΙΟ 6 - Δείκτες

τι περιέχει αυτό το κεφάλαιο...
Καλως ήρθατε στους δείκτες! ;) Να σημειώσω απο την αρχή πως είναι πολύ σημαντικοί για πολλά θέματα στην Πληροφορική! Τους δείκτες θα τους δείτε σε πολλά μαθήματα και είναι κάτι που βολεύει τους προγραμματιστές για μεγάλα και πολύπλοκα προγράμματα. Χρησιμοποιούνται για δυναμική δεύσμευση μνήμης και για πολλά άλλα! Μπορούμε πλέον να περάσουμε-επιστρέψουμε παραπάνω απο ένα αποτελέσαμτα σε κάποια συνάρτηση.

Για λόγους ευκολίας ένας δείκτης είναι ένα "βελάκι" που δείχνει κάπου. Συγκεκριμένα σε ένα κουτί και τι είναι αυτό; Μια διεύθυνση μνήμης! Οπότε συνοψίζοντας μπορούμε να βγάλουμε τον ακόλουθο ορισμό:
έγραψε:Άν ο x είναι δείκτης τότε δείχνει σε μια θέση μνήμης και ΔΕΝ είναι αυτή η θέση μνήμης.


Απο την στιγμή που οι δείκτες 'παίζουν' με διευθύνσεις μνήμης θα πρέπει να γνωρίζουμε τι γίνετε με την μνήμη του υπολογιστή μας. Οι μνήμες λοιπόν, δεν είναι τίποτα άλλο απο κουτάκια στα οποία μπορούμε να τους βάλουμε τιμές. Το κάθε κουτάκι, είναι μια θέση μνήμης και έχει μια διεύθυνση και τιμή. Η αρχική τιμή είναι null ή αλλιως κενή! Χρησιμοπιώντας ή όχι τους δείκτες, με την εντολή ανάθεσης γεμίζουμε αυτό το κουτάκι με κάποια τιμή! ;)

Δημιουργία ενός δείκτη
Στην C αν κάτι είναι δείκτης θα δηλώνεται μαζί με ένα αστεράκι. Να θυμάστε πως αυτά τα δύο πάνε μαζί. Η δήλωση ενός δείκτη γίενται ως εξής:
Κώδικας: Επιλογή όλων
όνοματύπου *ptrname;

  • όπου, όνοματύπου μπορεί να είναι int, char, float κτλ. Όπως δηλαδή ορίζουμε μια κανονική μεταβλητή και
  • ptrname το όνομα ενός δείκτη.
Όταν δημιουργούμε έναν δείκτη αρχικά δεν έχουμε ορίσει που θα δείχνει(συνήθως αυτό γίνεται). Οπότε ο δείκτης μας δείχνει στο κενό(σκουπίδια) και η εκτύπωση του περιεχομένου ενός τέτοιου δείκτη είναι λάθος και δεν οφελεί σε κάτι! Καλό είναι τους δείκτες να τους αρχικοποιείτε την main(στην αρχή) γιατί πολλές φορές μπορεί να υπάρχουν συναρτήσεις που να χρησιμοποιούν κάποιους δείκτες απο τους οποίους κάποιοι να αρχικοποιούνται μετά την κλήση της συνάρτησης.

Αρχικοποίηση ενός δείκτη
Ωραία! Κάναμε το πρώτο βήμα και φτιάξαμε ένα δείκτη. Δεσμεύσαμε με άλλα λόγια ένα κουτάκι μνήμης! Τι υπάρχει όμως μέσα στο κουτάκι; Αυτή τη στιγμή τίποτα. Για να αρχικοποιήσουμε και να βάλουμε κάτι μέσα στο κουτί θα πρέπει να του εκχωρήσουμε κάποια τιμή.
Ο τελεστής &(ampersand) δείνει μια διεύθυνση. Ως αποτέλεσμα γράφοντας κάτι σαν,
Κώδικας: Επιλογή όλων
δείκτης = &μεταβλητή;

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

Παράδειγμα..
Κώδικας: Επιλογή όλων
char *ch1, *ch2;
float *value, percent;
ch1 = "billys";
percent = 23;

...παραπάνω βλέπουμε, δύο δείκτες τύπου char, έναν δείκτη τύπου float και μια κανονική μεταβλητή τύπου float.

Χρήση δεικτών...
Τώρα, φαντάζομαι πως μπορείτε να δηλώσετε και να δώσετε αρχική τιμή σε δείκτες. Πως & πότε θα τους χρησιμοποιείτε; Όταν ο τελεστής * προηγείται απο το όνομα ενός δείκτη τότε, αναφέρεται στο όνομα της μεταβλητής στην οποία δείχνει ο δείκτης. Ας υποθέσουμε οτι έχουμε αρχικοποιήσει έναν δείκτη ως εξής:
Κώδικας: Επιλογή όλων
p_rate = &rate; /* εκχωρεί την διευνση της rate στην p_rate */

Σύμφωνα με τα παραπάνω αν γράψουμε *όνομαδείκτη θα αναφερθούμε στην μεταβλητή. Συνεπωώς για να εκτυπώσουμε την μεταβληη rate, θα πρέπει μέσα σε ένα printf να γράψουμε το εξής:
Κώδικας: Επιλογή όλων
printf("%d", rate);

το οποίο είναι το ίδιο με:
Κώδικας: Επιλογή όλων
printf("%d", *rate);


Παράδειγμα(όσα είπαμε μέχρι τώρα)
Κώδικας: Επιλογή όλων
int *int_ptr ;
int myInt = 35 ;
int_ptr = & myInt ;

...ας δούμε αναλυτικά τι γίνεται παραπάνω!
  • Έχουμε κάνει ένα κουτάκι με όνομα my_ptr τύπου int. Τα περιεχόμενα αφού είναι δείκτης αθ είναι μια διευνση τύπου int.
  • Ορίζουμε και αρχικοποιούμε μια ματεβλητή τύπου int ίση με 35.
  • Εκχωρούμε την διεύθυνση της μεταβλητής στο κουτάκι με τον δείκτη.
Σημαντικό!
έγραψε:Το int_ptr πριν απο το 3ο βήμα γυρνά σκουπίδια! Αυτό γιατί απλά έχουμε φτιάξει έναν δείκτη και δεν του έχουμε δώσει αρχική τιμή.
Μετα απο την 3η εντολή γυρνά την διεύθυνση που του δώσαμε!


Θα πρέπει να έχετε πάρει μια ιδέα για το τί είναι δείκτης στην C και πως μπορεί να χρησιμοποιηθεί! Προτείνω να κάνετε μια παύση εδώ και να γράψετε 4-5 παραδειγματάκια δικά σας να δείτε πως μπορείτε να τους χρησιμοποιήσουμε.

δείτε ένα παράδειγμα:
Κώδικας: Επιλογή όλων

#include <stdio.h>

int main()
{
int x; /* A normal integer*/
int *p; /* A pointer to an integer ("*p" is an integer, so p
must be a pointer to an integer) */

p = &x; /* Read it, "assign the address of x to p" */
scanf( "%d", &x ); /* Put a value in x, we could also use p here */
printf( "%d\n", *p ); /* Note the use of the * to get the value */
getchar();
}


Δείκτες & Συναρτήσεις
Με την χρήση δεικτών μπορούμε να περάσουμε παραπάνω απο ένα όρισμα σε μια συνάρτηση. Όταν χρησιμοποιούμε δείκτες με άλλα λόγια είναι σαν να έχουμε δεσμεύσει κάποιο χωρο μνήμης μόνο. Απο εκεί και πέρα μπορούμε απλά (φανταστείτε με βελάκια) να δημιουργήσουμε κι άλλες μεταβλητές που όμως απλά θα δείχνουν στον αρχικό χώρο μνήμης! Έτσι μπορούμε σε μια συνάρτηση να περάσουμε πολλές μεταβλητές και να αλλάξουμε πολλα πραγματα. Αυτό δεν σημαίνει πως θα έχουμε πολλά return(). Ισχύει ακόμη και τώρα οτι σε μια συνάρτηση θα υπάρχει ένα μόνο return(η τουλάχιστον ένα θα ενεργοποιείται)! Απλά, περνώντας "με αναφορά" όπως λέγεται έναν δείκτη μπορούμε να κάνεουμε κάποιες αλλαγές και κάθε φορά που γίενται μια αλλαγή στη συνάρτηση θα γίνεται αυτόματα και στο κυρίως πρόγραμμα. Άρα, όταν θα αλλάζει κάτι στην συνάρτηση θα αλλάζει και στην
main()! Αυτός ο τρόπος είναι ΠΟΛΥ ΣΗΜΑΝΤΙΚΟΣ και χρησιμοποιείται πολλές φορές. ;)

Ας υποθέσουμε οτι έχουμε ορίσει δυο δείκτες ακεραίου τύπου και μια κανονική μεταβλητή ακεραίου τύπου. Δηλαδή απο κομμάτι κώδικα έχουμε αυτό:
Κώδικας: Επιλογή όλων

int *ptr_start; /* 1ος δείκτης */
int *ptr_end; /* 2ος δείκτης */
int val_simp; /* απλή μεταβλητή */


έχοντας την παρακάτω συνάρτηση που απλά προσθέτει ένα,
Κώδικας: Επιλογή όλων

int func(int val_simp, int *ptr_end, int *ptr_start) {
val_simp++;
*ptr_end++;
*ptr_start++;
return val_simp;
}

μπορούμε να την καλέσουμε απο την main με τον παρακάτω τρόπο,
int main(){
int *ptr_start; /* 1ος δείκτης */
int *ptr_end; /* 2ος δείκτης */
int val_simp; /* απλή μεταβλητή */
int temp;

temp = func(val_simp, &ptr_end, &ptr_start)
return 0;
}


Με άλλα λόγια ο τρόπος που δουλεύουμε είναι:
  • Στην κλήση συναρτήσεων δηλώνουμε ΜΟΝΟ τα ΟΝΟΜΑΤΑ των μεταβλητών.
  • Στο πέρασμα των παραμέτρων, δηλώνουμε και τον τύπο τους!
Δείτε και εδώ.

Καλή συνέχεια...
Τελευταία επεξεργασία από linuxs και 03 Ιούλ 2011, 00:12, έχει επεξεργασθεί 6 φορά/ες συνολικά
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Κεφάλαιο - Δείκτες

Δημοσίευσηαπό Qdata » 23 Μαρ 2011, 23:54

Μεταφέρθηκε στην κατάλληλη ενότητα.

Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 10 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό linuxs » 24 Μάιος 2011, 11:27

Άν έχει όρεξη κάποιες μπορεί να με βοηθήσει για να ολοκληρωθεί το κεφάλαιο; Είναι τόσα πολλά με τους δείκτες που θα ήθελα απόψεις η ακόμη και υλικό για να προσθέσω παραπάνω.

thanks guys..
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 10 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 03 Ιουν 2011, 16:56

linuxs έγραψε:Άν έχει όρεξη κάποιες μπορεί να με βοηθήσει για να ολοκληρωθεί το κεφάλαιο; Είναι τόσα πολλά με τους δείκτες που θα ήθελα απόψεις η ακόμη και υλικό για να προσθέσω παραπάνω.

thanks guys..

Μπορείς να χρησιμοποιήσεις αν θες ολόκληρο η οποιοδήποτε τμήμα θεωρείς πιο κατάλληλο από αυτή τη δημοσίευση και κάτω, όπου προσπαθώ να εξηγήσω με απλά λόγια τους δείκτες (μεταξύ διαφόρων άλλων) στο προγραμματιστικό φόρουμ της GVRteam. Θα παρακαλούσα μόνο να αναφέρεις την πηγή σε τέτοιο ενδεχόμενο :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 10 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό linuxs » 11 Ιουν 2011, 20:31

migf1 έγραψε:
linuxs έγραψε:Άν έχει όρεξη κάποιες μπορεί να με βοηθήσει για να ολοκληρωθεί το κεφάλαιο; Είναι τόσα πολλά με τους δείκτες που θα ήθελα απόψεις η ακόμη και υλικό για να προσθέσω παραπάνω.

thanks guys..

Μπορείς να χρησιμοποιήσεις αν θες ολόκληρο η οποιοδήποτε τμήμα θεωρείς πιο κατάλληλο από αυτή τη δημοσίευση και κάτω, όπου προσπαθώ να εξηγήσω με απλά λόγια τους δείκτες (μεταξύ διαφόρων άλλων) στο προγραμματιστικό φόρουμ της GVRteam. Θα παρακαλούσα μόνο να αναφέρεις την πηγή σε τέτοιο ενδεχόμενο :)


Ναι εννοείτε αν τύχει και το χρησιμοποιήσω θα αναφέρω. Μέχρι τώρα ψιλοσυμβουλεύομαι ένα βιβλίο μονάχα για τους Pointers γιατί αν και τα έχω στο μυαλό μου ακόμη δεν τίναι ΤΟΣΟ ξεκάθαρα για να τουυς μεταδώσω σε post...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό stamatiou » 21 Ιουν 2011, 22:01

migf1 έγραψε:
linuxs έγραψε:Άν έχει όρεξη κάποιες μπορεί να με βοηθήσει για να ολοκληρωθεί το κεφάλαιο; Είναι τόσα πολλά με τους δείκτες που θα ήθελα απόψεις η ακόμη και υλικό για να προσθέσω παραπάνω.

thanks guys..

Μπορείς να χρησιμοποιήσεις αν θες ολόκληρο η οποιοδήποτε τμήμα θεωρείς πιο κατάλληλο από αυτή τη δημοσίευση και κάτω, όπου προσπαθώ να εξηγήσω με απλά λόγια τους δείκτες (μεταξύ διαφόρων άλλων) στο προγραμματιστικό φόρουμ της GVRteam. Θα παρακαλούσα μόνο να αναφέρεις την πηγή σε τέτοιο ενδεχόμενο :)

Είσαι ΘΕΟΣ!:clap: :clap: Παντού τα λένε μα πολύ μπέρδεμα, αλλά εσύ είσαι τέλειος! :!: :!: Τα κατάλαβα επιτέλους! :crazy: ΕΙΜΑΙ ΦΑΝ ΣΟΥ! :clap: :clap: :clap: :clap:
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 22 Ιουν 2011, 10:29

Ευχαριστώ για τα καλά σου λόγια! Χαίρομαι που σε βοήθησε να τα καταλάβεις :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 23 Ιουν 2011, 22:53

stamatiou έγραψε:
Είσαι ΘΕΟΣ!:clap: :clap: Παντού τα λένε μα πολύ μπέρδεμα, αλλά εσύ είσαι τέλειος! :!: :!: Τα κατάλαβα επιτέλους! :crazy: ΕΙΜΑΙ ΦΑΝ ΣΟΥ! :clap: :clap: :clap: :clap:


αΚΡΙΒΩς!!!! Ειναι ο χακερ της C . Ειναι εξαιρετικος ο ανθρωπος
Και εγω απο εκει διαβαζω τωρα. Τα συγχαρητηρια μου. Και μπραβο και στον λινους
που εχει αναλαβει τους οδηγους για C μπραβο ρε παιδια.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό linuxs » 23 Ιουν 2011, 23:02

Star_Light έγραψε:
stamatiou έγραψε:
Είσαι ΘΕΟΣ!:clap: :clap: Παντού τα λένε μα πολύ μπέρδεμα, αλλά εσύ είσαι τέλειος! :!: :!: Τα κατάλαβα επιτέλους! :crazy: ΕΙΜΑΙ ΦΑΝ ΣΟΥ! :clap: :clap: :clap: :clap:


αΚΡΙΒΩς!!!! Ειναι ο χακερ της C . Ειναι εξαιρετικος ο ανθρωπος
Και εγω απο εκει διαβαζω τωρα. Τα συγχαρητηρια μου. Και μπραβο και στον λινους
που εχει αναλαβει τους οδηγους για C μπραβο ρε παιδια.

χεχε φοβάμαι οτι δεν συγκρίνομαι.... ;) ...οτι μπορώ κάνω βρε παιδιά! ...οτι γνώσεις έχω προσπαθώ να τις μεταδώσω! :D
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 23 Ιουν 2011, 23:50

ΜΙας και διαβαζω πολυ προσεκτικα το τουτοριαλ του migf1 βρηκα ενα λαθάκι εκ παραδρομης... \

Κώδικας: Επιλογή όλων
Pointer Arithmetic (Αριθμητική Δεικτών)

Μιας και τα arrays καταλαμβάνουν συνεχόμενη μνήμη, μπορούμε με απλές αριθμητικές πράξεις να πηγαίνουμε τον pointer p σε όποιο στοιχείο του nums θέλουμε, και το *p να είναι ο ακέραιος που περιέχει αυτό το στοιχείο του nums :)

Για να πάμε δηλαδή τον p στο 5ο στοιχείο του nums, αρκεί απλά να προσθέσουμε τον αριθμό 4 στο p (4 και όχι 5, γιατί ο p βρίσκεται ήδη στο 1ο στοιχείο του nums). Γράφοντας λοιπόν...

Κώδικας: Επιλογή όλων
p += 4; // ισοδυναμεί με: p = p + 4;

μετακινούμε τον p 4 θέσεις προς τα δεξιά, και ουσιαστικά δείχνει πλέον τη διεύθυνση μνήμης στην οποία είναι αποθηκευμένο το 5ο στοιχείο του array nums. Άρα το *p συμβολίζει πλέον τον ακέραιο που περιέχει το [b] nums[5], [/b] δηλαδή τον αριθμό 50.


Εδω ειναι nums[4] μιας και αναφερομαστε στο 4ο στοιχειο ξεκινωντας τον πινακα απο το μηδενικο στοιχειο και δεικτη θεσης πινακα nums[0].
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Επόμενο

Επιστροφή στο Μαθήματα C

cron