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

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

Δημοσ.
Έχω το παρακάτω πρόγραμμα που δεν μπορώ να καταλάβω πως εκτυπώνει αυτό το αποτέλεσμα;;
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);
}

Δημοσ.

Το * κάνει 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.

 

Έτσι λειτουργούν και οι υπόλοιπες κλήσεις της συναρτήσεις, μόνο τα ορίσματα αλλάζουν κάθε φορά.

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

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

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

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

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

Σύνδεση

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

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