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

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

Δημοσ.

μπορω να γραψω τον παρακατω κωδικα σε λιγοτερες γραμμες ? το προβλημα ειναι οτι οταν αλλαζουν τα "xarray[]" δεν αλλαζουν τα "facex" , "x" , "grass1x" , "grass2x" . δηλαδη θελω να μην ειναι απαρετητο να γραψω τον κωδικα στο if statement .

    int xarray[4];
    xarray[0]=facex;
    xarray[1]=x;
    xarray[2]=grass1x;
    xarray[3]=grass2x;

if(kbd.DownIsPressed())
    {
        facex=yarray[0];
        x=xarray[1];
        grass1x=xarray[2];
        grass2x=xarray[3];
    }
Δημοσ.

 

μπορω να γραψω τον παρακατω κωδικα σε λιγοτερες γραμμες ? το προβλημα ειναι οτι οταν αλλαζουν τα "xarray[]" δεν αλλαζουν τα "facex" , "x" , "grass1x" , "grass2x" . δηλαδη θελω να μην ειναι απαρετητο να γραψω τον κωδικα στο if statement .

    int xarray[4];
    xarray[0]=facex;
    xarray[1]=x;
    xarray[2]=grass1x;
    xarray[3]=grass2x;

if(kbd.DownIsPressed())
    {
        facex=yarray[0];
        x=xarray[1];
        grass1x=xarray[2];
        grass2x=xarray[3];
    }
if(kbd.DownIsPressed())
    facex = yarray[0];
  • Like 1
Δημοσ.

Εγώ πάλι, δεν κατάλαβα την ερώτηση (άρα ούτε την απάντηση).

 

Γενικώς όμως, όταν θέλουμε 2 μεταβλητές να δείχνουν στο ίδιο πράγμα και ενημερώνοντας τη μια να ενημερώνεται αυτόματα και η άλλη, τότε συνήθως κάνουμε την "άλλη" να είναι pointer στη "μια", κι ενημερώνουμε μετά οποιαδήποτε  από τις 2.

Δημοσ.

Εκτος και αν ο ΟΡ εκανε καποιο typo, η απαντη του παπι εχει νοημα γιατι απλως αφαιρεσε αχρηστα statements

πχ οταν γραψεις Α = Β, ειναι ανουσιο στο καπακι να γραψεις Β = Α (εστω και αν ειναι μεσα σε if)

Δημοσ.

Εκτος και αν ο ΟΡ εκανε καποιο typo, η απαντη του παπι εχει νοημα γιατι απλως αφαιρεσε αχρηστα statements

πχ οταν γραψεις Α = Β, ειναι ανουσιο στο καπακι να γραψεις Β = Α (εστω και αν ειναι μεσα σε if)

 

Διαβάζοντας την ερώτηση εγώ θεώρησα (λογικά πιστεύω) πως το initalization του xarray[] γίνεται στην αρχή μια φορά, κατόπιν οι τιμές του xarray αλλάζoυν σε άλλα σημεία του προγράμματος, αλλά κάθε φορά που πατιέται το κάτω βελάκι θέλουμε να αντιγράφουμε μέσα στα υπόλοιπα τις ήδη αλλαγμένες τιμές του xarray[].

 

Γενικώς βρίσκω τελείως ασαφή την αρχική ερώτηση. Ακόμα και εκείνο το "λιγότερες γραμμές" είναι ασαφές αν δεν μας πει ο ts γιατί θέλει να το κάνει με λιγότερες γραμμές (π.χ. αν είναι επειδή το γράφει πολύ συχνά μέσα στον κώδικα, τότε μάλλον πρέπει να το κάνει μια επαναχρησιμοποιούμενη συνάρτηση... αν είναι επειδή νομίζει πως γράφοντας λιγότερες γραμμές γλιτώνει σε επιδόσεις, τότε δεν ισχύει... αν είναι επειδή θέλει να να συνδυάσει λιγότερο κώδικα με καλύτερες επιδόσεις, τότε μάλλον πρέπει να αναθεωρήσει τις μεταβλητές του και να χρησιμοποιήσει δείκτες, κλπ, κλπ).

Δημοσ.

Πραγματι, εχουμε λοιπον ενα μπερδεμα το οποιο προκληθηκε απο το ασαφες 1ο μηνυμα.

Ας μας δωσει ο OP περισσοτερες πληροφοριες πριν συνεχισουμε τις ευγενεις μας προσπαθειες να τον βοηθησουμε.

Δημοσ.

Εγώ πάλι, δεν κατάλαβα την ερώτηση (άρα ούτε την απάντηση).

 

Γενικώς όμως, όταν θέλουμε 2 μεταβλητές να δείχνουν στο ίδιο πράγμα και ενημερώνοντας τη μια να ενημερώνεται αυτόματα και η άλλη, τότε συνήθως κάνουμε την "άλλη" να είναι pointer στη "μια", κι ενημερώνουμε μετά οποιαδήποτε  από τις 2.

αυτο με το pointer πως ακριβως το κανω ?

Διαβάζοντας την ερώτηση εγώ θεώρησα (λογικά πιστεύω) πως το initalization του xarray[] γίνεται στην αρχή μια φορά, κατόπιν οι τιμές του xarray αλλάζoυν σε άλλα σημεία του προγράμματος, αλλά κάθε φορά που πατιέται το κάτω βελάκι θέλουμε να αντιγράφουμε μέσα στα υπόλοιπα τις ήδη αλλαγμένες τιμές του xarray[].

 

Γενικώς βρίσκω τελείως ασαφή την αρχική ερώτηση. Ακόμα και εκείνο το "λιγότερες γραμμές" είναι ασαφές αν δεν μας πει ο ts γιατί θέλει να το κάνει με λιγότερες γραμμές (π.χ. αν είναι επειδή το γράφει πολύ συχνά μέσα στον κώδικα, τότε μάλλον πρέπει να το κάνει μια επαναχρησιμοποιούμενη συνάρτηση... αν είναι επειδή νομίζει πως γράφοντας λιγότερες γραμμές γλιτώνει σε επιδόσεις, τότε δεν ισχύει... αν είναι επειδή θέλει να να συνδυάσει λιγότερο κώδικα με καλύτερες επιδόσεις, τότε μάλλον πρέπει να αναθεωρήσει τις μεταβλητές του και να χρησιμοποιήσει δείκτες, κλπ, κλπ).

εχω πολλα if statements στα οποια αλλαζουν τα xarray[] . δεν εχω κανενα προβλημα με τις επιδοσεις

Δημοσ.

αυτο με το pointer πως ακριβως το κανω ?

 

εχω πολλα if statements στα οποια αλλαζουν τα xarray[] . δεν εχω κανενα προβλημα με τις επιδοσεις

Σε απλή μορφή, το κάνεις κάπως έτσι...

int x = 5;
int *px = &x;
οπότε από εκεί και πέρα είτε γράψεις x=10 είτε *px=10, θα ενημερωθούν και τα 2 με την τιμή 10 (αφού ουσιαστικά ο pointer px δείχνει απευθείας στη μνήμη που έχει δεσμευτεί για τη μεταβλητή x).

 

EDIT:

 

Στο παράδειγμά σου, μπορείς να κάνεις εξαρχής τα face, x, grass1 και grass2 να είναι δείκτες στα στοιχεία του xarray[] που σε ενδιαφέρουν, οπότε ανά πάσα στιγμή θα μπορείς με αυτά να αναφέρεσαι στα ενημερωμένα στοιχεία του xarray[] ... πρόσεξε όμως πως αν τους αλλάξεις τιμή θα αλλάξει και το αντίστοιχο στοιχείο του xarray[].

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

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

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

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

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

Σύνδεση

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

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