Tichucounter12 Δημοσ. 27 Ιουνίου 2015 Δημοσ. 27 Ιουνίου 2015 Έχω το παρακάτω πρόγραμμα που δεν μπορώ να καταλάβω πως εκτυπώνει αυτό το αποτέλεσμα;;8 3 5 8 11 6 9 11 14 Μήπως μπορείτε να μου το εξηγήσετε με απλά λόγια γιατί ακόμα είμαι λίγο αρχάριος.. Δεν μπορώ να καταλάβω πως λειτουργούν τα * !! #include <stdio.h> void test (int *a, int *b, int c) { *a=c+3; *b=c-2; c=c+2; } main(){ int x=2,y=3,z=5; test (&x,&y,z); printf("%d %d %d\n",x,y,z); test (&y,&z,x); printf("%d %d %d\n",x,y,z); test (&z,&x,y); printf("%d %d %d\n",x,y,z); }
infin1tyGR Δημοσ. 27 Ιουνίου 2015 Δημοσ. 27 Ιουνίου 2015 Το * κάνει dereference σε έναν pointer. Όταν είναι στο αριστερό μέλος ενός statement, «μπαίνει στη διεύθυνση» που δείχνει ο pointer και βάζει εκεί την τιμή του δεξιού μέλους.Στο συγκεκριμένο παράδειγμα, στην πρώτη κλήση της συνάρτησης, ο pointer a είναι η διεύθυνση της μεταβλητής x (αφού αυτό δίνεις ως όρισμα όταν την καλείς). Άρα το *a=c+3 σημαίνει «μπες στη διεύθυνση που δείχνει το a (δηλαδή τη διεύθυνση του x) και άλλαξε την τιμή εκεί με c+3 (δηλαδή 5+3, αφού το c έχει την τιμή του z, δηλαδή 8)» Οπότε μετά από αυτό το x γίνεται 8. Ομοίως το y γίνεται 3. Το z δε θα αλλάξει τιμή, τιμή αλλάζει μόνο η τοπική μεταβλητή c μέσα στη συνάρτηση που δεν επηρεάζει το z. Έτσι λειτουργούν και οι υπόλοιπες κλήσεις της συναρτήσεις, μόνο τα ορίσματα αλλάζουν κάθε φορά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα