Κλήση-από-αναφορά
Να κάνει μια κλήση-από-αναφορά λειτουργίας, αντί της διάβασης η ίδια της μεταβλητής, περνά τη διεύθυνση της μεταβλητής. Η διεύθυνση της μεταβλητής μπορεί να ληφθεί από τη χρησιμοποίηση & το χειριστή. Οι ακόλουθες κλήσεις μια λειτουργία ανταλλαγής που περνά τη διεύθυνση των μεταβλητών αντί των πραγματικών τιμών.
swap(&x, &y);
Dereferencing
Το πρόβλημα έχουμε τώρα είμαστε ότι την ανταλλαγή λειτουργίας έχουν περάσει τη διεύθυνση παρά τη μεταβλητή, έτσι χρειαζόμαστε στο dereference τις μεταβλητές έτσι ώστε εξετάζουμε τις πραγματικές τιμές παρά τις διευθύνσεις των μεταβλητών προκειμένου να αυτές ανταλλαχθούν.
Το Dereferencing επιτυγχάνεται στο γ με τη χρησιμοποίηση της σημείωσης δεικτών (*). Στους απλούς όρους, αυτό σημαίνει την τοποθέτηση * πριν από κάθε μεταβλητή πρίν χρησιμοποιεί το για αναφέρει στην αξία της μεταβλητής παρά τη διεύθυνσή του. Το ακόλουθο πρόγραμμα επεξηγεί την περνώ-από-αναφορά στην ανταλλαγή δύο τιμές.
#include <stdio.h>
void swap(int *x, int *y);
int main()
{
int x=6, y=10;
printf("Before the function swap, x = %d and y =
%d\n\n", x, y);
swap(&x, &y);
printf("After the function swap, x = %d and y =
%d\n\n", x, y);
return 0;
}
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
Δείτε την παραγωγή του προγράμματος:
Before the function swap, x = 6 and y = 10
After the function swap, x = 10 and y = 6 |
Οι λειτουργίες μπορούν να είναι επαναλαμβανόμενες που είναι μια λειτουργία μπορεί να κληθεί. Κάθε κλήση σε το απαιτεί ότι η τρέχουσα κατάσταση της λειτουργίας ωθείται επάνω στο σωρό. Είναι σημαντικό να αναφερθεί αυτό το γεγονός όπως είναι εύκολο να δημιουργηθεί μια υπερχείλιση σωρών, δηλ. ο σωρός έχει τρέξει από το διάστημα για να τοποθετήσει άλλα στοιχεία.
Το ακόλουθο παράδειγμα υπολογίζει τον παραγοντικό ενός αριθμού χρησιμοποιώντας recursion. Ένας παραγοντικός είναι ένας αριθμός που πολλαπλασιάζεται με κάθε άλλο ακέραιο αριθμό κάτω από το, κάτω από σε 1. Παραδείγματος χάριν, ο παραγοντικός του αριθμού 6 είναι:
Factorial 6 = 6 * 5 * 4 * 3 * 2 * 1
Επομένως ο παραγοντικός 6 είναι 720. Μπορεί να δει από το ανωτέρω παράδειγμα που παραγοντικά 6 = 6 * παραγοντικά 5. Ομοίως, παραγοντικά 5 = 5 * παραγοντικά 4, και τα λοιπά.
Tπου είναι ο γενικός κανόνας για τους παραγοντικούς αριθμούς.
factorial(n) = n * factorial(n-1)
Ο ανωτέρω κανόνας ολοκληρώνει όταν ν = προσπαθήστε 1, δεδομένου ότι ο παραγοντικός 1 είναι 1. να το καταλάβετε καλύτερα με τη βοήθεια του παραδείγματος:
#include <stdio.h>
long int factorial(int num);
int main()
{
int num;
long int f;
printf("Enter a number: ");
scanf("%d", &num);
f = factorial(num);
printf("factorial of %d is %ld\n", num, f);
return 0;
}
long int factorial(int num)
{
if (num == 1)
return 1;
else
return num * factorial(num-1);
}
Δείτε την παραγωγή της εκτέλεσης αυτού του προγράμματος:
Enter a number: 7
factorial of 7 is 5040 |
|