antemar Δημοσ. 28 Μαΐου 2008 Δημοσ. 28 Μαΐου 2008 Μπορεί κάποιος να μου εξηγήσει γιατί η σωστή απάντηση είναι η Α; void f(int *ip) { static int dummy = 5; ip = &dummy; printf("%u\n",ip); } void main() { int *ip; f(ip); printf("%u",ip); } Α. Δύο τυχαίες αριθμητικές τιμές Β. Το 0 και μία τυχαία αριθμητική τιμή Γ. Θα εμφανιστεί λάθος εκτέλεσης Δ. Τίποτα από τα παραπάνω
Siroko Δημοσ. 28 Μαΐου 2008 Δημοσ. 28 Μαΐου 2008 Γιατι ο δεικτης μεσα στην συναρτηση εκτυπωνει την διευθηνση της τοπικης μεταβλητης dummy, σημειωση δεν αλλαζει η τιμη του δεικτη στην main() αφου στην ουσια περναει με τιμη, ενω στην main() εκτυπωνει μια τιμη οτι να ναι αφου δεν τον εχεις αρχικοποιησει..
antemar Δημοσ. 28 Μαΐου 2008 Μέλος Δημοσ. 28 Μαΐου 2008 Είχα την εντύπωση πως η σωστή είναι η Γ. Ωστόσο δεν διαφωνώ με το συλλογισμό σου, αλλά αν μπορείς, μου εξηγείς τι εννοείς λέγοντας "...δεν αλλαζει η τιμη του δεικτη στην main() αφου στην ουσια περναει με τιμη, ενω στην main() εκτυπωνει μια τιμη οτι να ναι..."
Siroko Δημοσ. 28 Μαΐου 2008 Δημοσ. 28 Μαΐου 2008 Οταν δηλωνεις τον δεικτη αρχικα παιρνει μια "τυχαια" τιμη στην μνημη, π.χ. πες οτι εχει 0χ0οΡ324. Μετα οταν στην εντολη f(ip) γινεται αντιγραφη αυτου του τυχαιου αριθμου σε μια τοπικη μεταβλητη της συναρτησης f() που απλα εχει το ιδιο ονομα με τον δεικτη ip της main(), (εναν τοπικο δεικτη) -απο την στιγμη που περναει με τιμη και οχι με αναφορα ο δεικτης απο την main(). Ετσι οταν με την εντολη ip = &dummy; δινεις διευθηνση στον δεικτη αλλαζει μονο ο τοπικος δεικτης της συναρτησης εστω παιρνει την τιμη 0χ0adsf3. Ετσι οταν γινεται return στην main() εξακολουθει να εχει την αρχικη τιμη 0χ0οΡ324. Στις printf() εκτυπωνει την διευθηνση της μνημης στις 2 περιπτωσεις που ειναι ουσιαστικα τυχαιες.. Ελπιζω να βοηθησα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.