Δημοσιεύτηκε: 08 Σεπ 2011, 23:32
από migf1
stamatiou έγραψε:
Εννοεί ότι προσπαθώ να περάσω έναν pointer σε int, να δοκιμάσω με cast;
Edit: Oκ, τελικά δουλεύει έτσι:
Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(void) {
int *p,i;
i = (int )&p;
printf("%d\n",i);
return 0;
}

Αλλά εγώ τι έκανα print πριν;

Ωραίος, και για να είσαι ακόμα πιο σωστός το i (το οποίο btw άλλαξέ το με ένα όνομα της προκοπής !!!! :P π.χ. addr) αντί για int όρισέ το ως unsigned long (και τύπωσε το με %lu).

Αυτός λοιπόν είναι ο εύκολος και μη συμβατός τρόπος να μετατρέπεις έναν δείκτη σε ακέραια τιμή. Βέβαια τώρα έχεις ένα άλλο πρόβλημα, δεν μπορείς να δεις τι περιέχει ο p χρησιμοποιώντας το i ... δεν το ζήτησα αυτό :)

Το ζητάω τώρα όμως, θα το καταφέρουμε... τι λέτε;

Δηλαδή, όλο μαζί: γράψτε ένα πρόγραμμα που θα ορίζει έναν δείκτη p οποιουδήποτε τύπου, θα τον βάζει να δείχνει σε έγκυρα περιεχόμενα μνήμης. Kατόπιν θα χρησιμοποιεί μια άλλη μεταβλητή paddr στην οποία θα περνάει τη διεύθυνση μνήμης του p και μέσω αυτής της paddr θα τυπώνει στην οθόνη την τιμή που υπάρχει στη μνήμη στην οποία δείχνει ο p.