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

Δείκτες


FarCry1

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

Καλησπέρα. Ξερω οτι στην γλωσσα 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? Ευχαριστω πολυ!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Εξαρτάται τη γλώσσα.

Συγκεκριμένα για τη Java, παρόλο που κάνει χρήση δεικτών δεν μπορείς να αναφερθείς σε αυτούς όπως για παράδειγμα κάνεις στη C/C++. Στη Java γενικότερα κάνουμε χρήση των Get & Set. Περισσότερα σχετικά με τους δείκτες στη Java μπορείς να διαβάσεις εδώ.

Και εδώ πως μπορείς να κάνεις αυτό που ζητάς σε διάφορες γλώσσες προγραμματισμού.

Επεξ/σία από ulb
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η χρήση δεικτών όπως παρουσιάζεται από το θεματοθέτη είναι το πέρασμα με αναφορά. Η c εξ ορισμού έχει πέρασμα με αντιγραφή. Όταν όμως ζητάμε το δείκτη μιας μεταβλητής αυτός ενώ θα γίνει με αντιγραφή, ο χειρισμός του οδηγεί να πραγματοποιεί πέρασμα με αναφορά. Δεν είναι όμως στην ολότητα του πέρασμα με αναφορά γιατί μετά τη κλήση ο δείκτης δεν αλλάζει για αυτό που δίνουμε ως παράμετρο.

Στη java, επίσης έχουμε πέρασμα με τιμή (αντιγραφή τιμής) που για ένα αντικείμενο είναι ο δείκτης του. Έτσι ενώ μπορούμε να αλλάξουμε μια ιδιότητα του αντικειμένου, ο δείκτης θα παραμένει ίδιος και στην επιστροφή. 

Στη C οι δείκτες ως offsets μπορούν να χρησιμοποιηθούν με πρόσθεση ή αφαίρεση αριθμού (χωρίς να βγαίνει υπερχείλιση) το οποίο στα σύγχρονα λειτουργικά μπορεί να δείχνουν σε ανύπαρκτη μνήμη! Αυτός είναι και ένας λόγος που σε πιο σύγχρονες γλώσσες αφαιρέθηκε αυτή η δυνατότητα. Όπως επίσης δεν υπάρχει η δυνατότητα να δώσουμε ξερά διεύθυνση ως δείκτη αντικειμένου ή πινακα. Γενικά μια εποχή που δεν υπήρχε πολύ μνήμη, γινόντουσαν παράτολμα πράγματα από μεγάλους προγραμματιστές. Σήμερα δεν υπάρχει τέτοιο ζήτημα. Βλέπουμε προγράμματα στη java τέρατα των 20MByte, ενώ ο κώδικας φαίνεται πολύ μικρός. Αυτό συμβαίνει γιατί με τα αντικείμενα όταν χρειάζεσαι το δένδρο θα πάρεις και το δάσος μαζί! :)

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 1 μήνα μετά...
Στις 20/3/2022 στις 4:07 ΜΜ, FarCry1 είπε

Πως ομως θα γινοταν αυτο σε μια αλλη γλωσσα προγραμματισμου πχ στην Java? Ευχαριστω πολυ!

Αν το ζητούμενο είναι να καταλήξεις τελικά με δύο μεταβλητές, που θα έχουν η κάθε μία την αρχική τιμή της άλλης, αυτό γίνεται σε όλες τις γλώσσες. Προφανώς χωρίς pointers, σε όσες γλώσσες δεν έχουν αυτή τη δυνατότητα. Έχουν όμως άλλα εργαλεία ή συντακτικές επιλογές. Πχ σε python μπορείς να κάνεις αυτό: 

a, b = b, a

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...