Εξετάστε τις ακόλουθες δηλώσεις:
int var_x;
int* ptrX;
var_x = 6;
ptrX = &var_x;
*ptrX = 12;
printf("value of x : %d", var_x);
Η πρώτη γραμμή αναγκάζει το μεταγλωττιστή για να διατηρήσει ένα διάστημα στη μνήμη για έναν ακέραιο αριθμό. Η δεύτερη γραμμή λέει στο μεταγλωττιστή για να διατηρήσει το διάστημα για να αποθηκεύσει έναν δείκτη.
Ένας δείκτης είναι μια θέση αποθήκευσης για μια διεύθυνση. Η τρίτη γραμμή πρέπει να υπενθυμίσει σε σας οι δηλώσεις scanf. Ο χειριστής διευθύνσεων "&" λέει στο μεταγλωττιστή για να πάει στη θέση που αποθήκευσε var_x, και δίνει έπειτα τη διεύθυνση της θέσης αποθήκευσης σε ptrX.
Ο αστερίσκος * μπροστά από μια μεταβλητή λέει στο μεταγλωττιστή στο dereference ο δείκτης, και πηγαίνει στη μνήμη. Κατόπιν μπορείτε να κάνετε τις αναθέσεις στη μεταβλητή που αποθηκεύεται σε εκείνη την θέση. Μπορείτε να παραπέμψετε μια μεταβλητή και να έχετε πρόσβαση στα στοιχεία της μέσω ενός δείκτη. Δείτε ένα παράδειγμα των δεικτών:
/* απεικόνιση της χρήσης δεικτών */
#include <stdio.h>
int main()
{
int index, *pt1, *pt2;
index = 39; /* any numerical value */
pt1 = &index; /* the address of index */
pt2 = pt1;
printf("The value is %d %d %d\n", index, *pt1, *pt2);
*pt1 = 13; /* αυτό αλλάζει την αξία του δείκτη */
printf("The value is %d %d %d\n", index, *pt1, *pt2);
return 0;
}
Η παραγωγή του προγράμματος θα επιδειχθεί ως εξής:
The value is 39 39 39
The value is 13 13 13 |
|