μαρια123 Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 καλησπερα και παλι!!! εχω προβλημα!!! μου εχουν δωσει το εξης προγραμμα #include <stdio.h> void makeDouble(int y) { y = y * 2; } main () { int x; printf("Dwse ari8mo"); scanf("%d", &x); makeDouble(x); printf("H nea timi tis metablitis einai %d", x); } και μου ζηταει να εξηγησω γιατι η συναρτηση που περιεχει δεν διπλασιαζει την τιμη της παραμετρου που δινουμε. οσο και αν ψαχνω δεν μπορω να βρω τι φταει....
Candlemass Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 Είναι δηλωμένη σαν void, δλδ η συνάρτηση δεν επιστρέφει τίποτα όταν καλείται, απλώς κάνει τον υπολογισμό. Πάντως αν σκαλώνεις σε τέτοια προβλήματα, ίσως θα έπρεπε να διαβάσεις λίγο καλύτερα τη θεωρία...
μαρια123 Δημοσ. 27 Μαΐου 2012 Μέλος Δημοσ. 27 Μαΐου 2012 Είναι δηλωμένη σαν void, δλδ η συνάρτηση δεν επιστρέφει τίποτα όταν καλείται, απλώς κάνει τον υπολογισμό. Πάντως αν σκαλώνεις σε τέτοια προβλήματα, ίσως θα έπρεπε να διαβάσεις λίγο καλύτερα τη θεωρία... ευχαριστω. η αληθεια ειναι οτι δεν τα ξερω καλα
Re4cTiV3 Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 Εκτός αυτού, μπορείς και μέσω void συνάρτηση να πειράξεις μια μεταβλητή που βρίσκεται στην main παιρνόντας και πειράζοντας την διεύθυνση μνήμης της μεταβλητής.
Haldol Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 Εκτός αυτού, μπορείς και μέσω void συνάρτηση να πειράξεις μια μεταβλητή που βρίσκεται στην main παιρνόντας και πειράζοντας την διεύθυνση μνήμης της μεταβλητής. Η κοπελιά σκάλωσε σε πρόβλημα τύπου "γιατί μια void συνάρτηση δεν επιστρέφει τιμή" κι εσύ της λες για pointers;
Re4cTiV3 Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 Επειδή λέει να εξηγήσει γιατί δεν διπλασιάζει γιατί να μην το γράψει κι αυτό
defacer Δημοσ. 27 Μαΐου 2012 Δημοσ. 27 Μαΐου 2012 οσο και αν ψαχνω δεν μπορω να βρω τι φταει.... Φταίει το ότι κατ' αρχήν υποθέτεις πως θα έπρεπε να δουλέψει, κάτι που δε σε βάζει στο σωστό mindset, και ότι η εκφώνηση δεν είναι και η πιο βοηθητική. Προφανώς η συνάρτηση όντως διπλασιάζει την τιμή της παραμέτρου που εισάγαμε (αφού γράφει επι 2 και αυτήν της περνάμε). Πιο σωστό θα ήταν να σκεφτείς γιατί δεν διπλασιάζεται το περιεχόμενο της μεταβλητής x. Φαντάσου ότι ο κώδικας έλεγε >void makeDouble(int y) { int TreisLalounKaiDyoXoreyoun = y * 2; } Αυτό προφανώς δε θα περίμενες να δουλέψει κατά τα λεγόμενα της εκφώνησης, επειδή θέτει την τιμή μιας μεταβλητής η οποία δεν έχει καμία σχέση με οποιοδήποτε άλλο μέρος του προγράμματος (είναι local στη function). Βοηθάει αυτό;
georgemarios Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Προτείνω, γκούγκλαρε για "call by reference" και "call by value"
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα