Προς το περιεχόμενο

κωδικας σε C


antemar

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορεί κάποιος να μου εξηγήσει γιατί η σωστή απάντηση είναι η Α;

 

void f(int *ip)

{

static int dummy = 5;

ip = &dummy;

printf("%u\n",ip);

}

 

void main()

{

int *ip;

f(ip);

printf("%u",ip);

}

Α. Δύο τυχαίες αριθμητικές τιμές

Β. Το 0 και μία τυχαία αριθμητική τιμή

Γ. Θα εμφανιστεί λάθος εκτέλεσης

Δ. Τίποτα από τα παραπάνω

Δημοσ.

Γιατι ο δεικτης μεσα στην συναρτηση εκτυπωνει την διευθηνση της τοπικης μεταβλητης dummy, σημειωση δεν αλλαζει η τιμη του δεικτη στην main() αφου στην ουσια περναει με τιμη, ενω στην main() εκτυπωνει μια τιμη οτι να ναι αφου δεν τον εχεις αρχικοποιησει..

Δημοσ.

Είχα την εντύπωση πως η σωστή είναι η Γ.

Ωστόσο δεν διαφωνώ με το συλλογισμό σου, αλλά αν μπορείς, μου εξηγείς τι εννοείς λέγοντας "...δεν αλλαζει η τιμη του δεικτη στην main() αφου στην ουσια περναει με τιμη, ενω στην main() εκτυπωνει μια τιμη οτι να ναι..."

Δημοσ.

Οταν δηλωνεις τον δεικτη αρχικα παιρνει μια "τυχαια" τιμη στην μνημη, π.χ. πες οτι εχει 0χ0οΡ324. Μετα οταν στην εντολη f(ip) γινεται αντιγραφη αυτου του τυχαιου αριθμου σε μια τοπικη μεταβλητη της συναρτησης f() που απλα εχει το ιδιο ονομα με τον δεικτη ip της main(), (εναν τοπικο δεικτη) -απο την στιγμη που περναει με τιμη και οχι με αναφορα ο δεικτης απο την main(). Ετσι οταν με την εντολη

ip = &dummy; δινεις διευθηνση στον δεικτη αλλαζει μονο ο τοπικος δεικτης της συναρτησης εστω παιρνει την τιμη 0χ0adsf3. Ετσι οταν γινεται return στην main() εξακολουθει να εχει την αρχικη τιμη 0χ0οΡ324. Στις printf() εκτυπωνει την διευθηνση της μνημης στις 2 περιπτωσεις που ειναι ουσιαστικα τυχαιες.. Ελπιζω να βοηθησα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...