derasto Δημοσ. 28 Απριλίου 2009 Δημοσ. 28 Απριλίου 2009 Καλησπερα,εχv το ακολουθο προγραμμα σε C,μπορει καποιος να μου εξηγησει την νοοτροπια που ακολουθω για να βγαλω τις τιμες χωρις καποιον compiler γιατι ακομα δεν τα παω καλα με pointers. Οι τιμες ειναι απο το devc++ 5 3 0 -3 2 0 -3 -6 -1 Thanks in advance >void test (int *a,int b, int *c){ *a=b+2; *c=b-3; b=*a+*c; } main (){ int a,b,c; b=3; test (&a,b,&c); printf ("%d %d %d\n",a,b,c); test (&b,c,&a); printf ("%d %d %d\n",a,b,c); test (&c,a,&; printf ("%d %d %d\n",a,b,c); }
Bspus Δημοσ. 28 Απριλίου 2009 Δημοσ. 28 Απριλίου 2009 Το πρωτο βημα το καταλαβαινεις? Πως εφτασες στο 5 3 0? Στον ορισμο της test, στις παραμετρους στην πρωτη γραμμη, τα *a και *c αναφερονται σε διευθυνσεις οι οποιες εχουν αποθηκευμενο εναν ακεραιο και οχι στον ιδιο τον ακεραιο. Μεσα στο σωμα της test, οταν κανεις assign *a=b+2 λες "πηγαινε στη διευθυνση που πηρες απο την παραμετρο *a και γραψε εκει το αθροισμα των 2 ακεραιων". Προσεξε οτι λεμε για την παραμετρο της συναρτησης test και οχι για τον ακεραιο a της main ουτε τη διευθυνση του ακεραιου a της main. Με την ιδια λογικη και το *c. Στην τελευταια γραμμη το b (της συναρτησης) γινεται ισο με το αθροισμα των ακεραιων που βρισκονται αποθηκευμενα στα *a και *c αλλα αυτο δεν επηρεαζει καθολου το b της main. H b της test ειναι απλως μια κοπια της b της main που υπαρχει μονο οσο τρεχει η test. H συνωνυμια τους, καθως και των υπολοιπων μεταβλητων και παραμετρων οδηγει σε μπερδεματα και προκαλει πονοκεφαλους. Αρα μεχρι εδω καταλαβαινεις γιατι το printf ("%d %d %d\n",a,b,c); σου βγαζει το 3 στη μεση. Η τιμη της b της main ειναι 3 οπως ακριβως την ορισες 2 γραμμες πιο πανω Τα a kai c (sti main) δεν τα αρχικοποιησες ποτε, ομως οταν τα κανεις print εχουν τις τιμες τους. Η τεστ επηρεασε τις τιμες των μεταβλητων a kai c της main. Αυτο συνεβη επειδη εδωσες στην τεστ μεσω παραμετρων τις διευθυνσεις στις οποιες βρισκονται αποθηκευμενες οι μεταβλητες a kai c της main. Η τεστ λοιπον αν και δεν μπορει να αλλαξει την ιδια τη διευθυνση στην οποια αποθηκευονται αυτες, μπορει να παει και να γραψει μεσα οτι της πεις, και αυτο κανει. Θα πρεπει μεχρι τωρα να καταλαβαινεις το πρωτο σετ τιμων. Για να καταλαβεις τα υπολοιπα το μονο που χρειαζεται ειναι πολλη προσοχη λογω των συνωνυμιων. Θα ηταν πιο ευκολο αν ονομαζες τις παραμετρους της τεστ σε *d,e,*f και ξαναγραφες την τεστ με αυτα τα ονοματα. Αλλα φανταζομαι οτι σας βαλαν την ασκηση ετσι ακριβως για να δυσκολευτειτε.
derasto Δημοσ. 28 Απριλίου 2009 Μέλος Δημοσ. 28 Απριλίου 2009 Eυχαριστω για την απαντηση σου, το πρωτο σετ τιμων το βγαζω παντα,κοιταω τωρα το 2ο κ 3ο και θα αλλαξω τις μεταβλητες οπως ειπες.Κατι ακομα το b της main 8α ειναι παντα 3 ή αναλογως τι θα δωσει η printf ?
Bspus Δημοσ. 29 Απριλίου 2009 Δημοσ. 29 Απριλίου 2009 Αυτο που λεει η printf Τη δευτερη και τριτη φορα που καλεις την τεστ δινεις ως παραμετρο τη διευθυνση της μεταβλητης b, οποτε η *τιμη* της b στη main θα αλλαξει
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.