FarCry1 Δημοσ. 20 Μαρτίου 2022 Δημοσ. 20 Μαρτίου 2022 Καλησπέρα. Ξερω οτι στην γλωσσα C πολλα πραγματα μπορουμε να τα κανουμε πιο ευκολα με τους δεικτες. Εστω πχ οτι εχουμε 2 μεταβλητες και θελουμε να αντιστρεψουμε τις τιμες ΟΧΙ στην main αλλα σε μία συναρτηση την οποια να την καλουμε ΜΙΑ φορα απο την main. Και οταν τελειωσει η συναρτηση, οι τιμες στην main θελουμε να ειναι αλλαγμενες. Ο κωδικας για να γίνει αυτο ειναι αυτος και κανει αυτο που θελουμε : #include <stdio.h> #include <stdlib.h> int res(int *x, int*y){ int temp; temp=*y; *y=*x; *x=temp; } int main() { int x; int y; x=5; y=10; printf("%d\n",x); printf("%d\n",y); res(&x, &y); printf("%d\n",x); printf("%d\n",y); } Πως ομως θα γινοταν αυτο σε μια αλλη γλωσσα προγραμματισμου πχ στην Java? Ευχαριστω πολυ!
ulb Δημοσ. 20 Μαρτίου 2022 Δημοσ. 20 Μαρτίου 2022 (επεξεργασμένο) Εξαρτάται τη γλώσσα. Συγκεκριμένα για τη Java, παρόλο που κάνει χρήση δεικτών δεν μπορείς να αναφερθείς σε αυτούς όπως για παράδειγμα κάνεις στη C/C++. Στη Java γενικότερα κάνουμε χρήση των Get & Set. Περισσότερα σχετικά με τους δείκτες στη Java μπορείς να διαβάσεις εδώ. Και εδώ πως μπορείς να κάνεις αυτό που ζητάς σε διάφορες γλώσσες προγραμματισμού. Επεξ/σία 20 Μαρτίου 2022 από ulb
solarpower Δημοσ. 22 Μαρτίου 2022 Δημοσ. 22 Μαρτίου 2022 Η χρήση δεικτών όπως παρουσιάζεται από το θεματοθέτη είναι το πέρασμα με αναφορά. Η c εξ ορισμού έχει πέρασμα με αντιγραφή. Όταν όμως ζητάμε το δείκτη μιας μεταβλητής αυτός ενώ θα γίνει με αντιγραφή, ο χειρισμός του οδηγεί να πραγματοποιεί πέρασμα με αναφορά. Δεν είναι όμως στην ολότητα του πέρασμα με αναφορά γιατί μετά τη κλήση ο δείκτης δεν αλλάζει για αυτό που δίνουμε ως παράμετρο. Στη java, επίσης έχουμε πέρασμα με τιμή (αντιγραφή τιμής) που για ένα αντικείμενο είναι ο δείκτης του. Έτσι ενώ μπορούμε να αλλάξουμε μια ιδιότητα του αντικειμένου, ο δείκτης θα παραμένει ίδιος και στην επιστροφή. Στη C οι δείκτες ως offsets μπορούν να χρησιμοποιηθούν με πρόσθεση ή αφαίρεση αριθμού (χωρίς να βγαίνει υπερχείλιση) το οποίο στα σύγχρονα λειτουργικά μπορεί να δείχνουν σε ανύπαρκτη μνήμη! Αυτός είναι και ένας λόγος που σε πιο σύγχρονες γλώσσες αφαιρέθηκε αυτή η δυνατότητα. Όπως επίσης δεν υπάρχει η δυνατότητα να δώσουμε ξερά διεύθυνση ως δείκτη αντικειμένου ή πινακα. Γενικά μια εποχή που δεν υπήρχε πολύ μνήμη, γινόντουσαν παράτολμα πράγματα από μεγάλους προγραμματιστές. Σήμερα δεν υπάρχει τέτοιο ζήτημα. Βλέπουμε προγράμματα στη java τέρατα των 20MByte, ενώ ο κώδικας φαίνεται πολύ μικρός. Αυτό συμβαίνει γιατί με τα αντικείμενα όταν χρειάζεσαι το δένδρο θα πάρεις και το δάσος μαζί! 1
n3a Δημοσ. 1 Μαΐου 2022 Δημοσ. 1 Μαΐου 2022 Στις 20/3/2022 στις 4:07 ΜΜ, FarCry1 είπε Πως ομως θα γινοταν αυτο σε μια αλλη γλωσσα προγραμματισμου πχ στην Java? Ευχαριστω πολυ! Αν το ζητούμενο είναι να καταλήξεις τελικά με δύο μεταβλητές, που θα έχουν η κάθε μία την αρχική τιμή της άλλης, αυτό γίνεται σε όλες τις γλώσσες. Προφανώς χωρίς pointers, σε όσες γλώσσες δεν έχουν αυτή τη δυνατότητα. Έχουν όμως άλλα εργαλεία ή συντακτικές επιλογές. Πχ σε python μπορείς να κάνεις αυτό: a, b = b, a
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα