Δημοσιεύτηκε: 23 Ιουν 2011, 11:48
από migf1
Δεν υπάρχει κάποιο στάνταρ ή κάποιος κανόνας. Συνήθως δεν χρειάζεται καν!

Ο πιο συνηθισμένος λόγος για να το κάνεις είναι αν θες να περνάς τη συνάρτηση ως όρισμα μιας άλλης συνάρτησης (η οποία δέχεται δείκτη ως όρισμα), κάτι που πρακτικά συνήθως χρησιμοποιείται στις συναρτήσεις των strings.

Π.χ. αν γράψεις μια συνάρτηση που παίρνει σαν όρισμα ένα string και μετατρέπει τους χαρακτήρες του σε κεφαλαία...
Κώδικας: Επιλογή όλων

void s_toupper( char *s );

αν την φτιάξεις να επιστρέφει void (δηλαδή τίποτα) τότε όταν στο πρόγραμμά σου θελήσεις να διαβάσεις ένα string από τον χρήστη, να το μετατρέψεις σε κεφαλαία και να το τυπώσεις, θα έγραφες κάτι σαν κι αυτό:
Κώδικας: Επιλογή όλων

char s[255+1] = "";

fgets(s, 255+1, stdin); // read s from user
s_toupper(s); // convert s to uppercase
puts( s ); // print s on the screen


Αν όμως θέλεις την s_toupper() να την περνάς ως όρισμα σε άλλες συναρτήσεις, τότε μπορείς να την κάνεις να επιστρέφει string ( char *s ):
Κώδικας: Επιλογή όλων

char *s_toupper(char *s);

Οπότε ο κώδικας δουλεύει και όπως είναι γραμμένος παραπάνω, αλλά τώρα δουλεύει και αν τον γράψεις ως εξής:
Κώδικας: Επιλογή όλων

char s[255+1] = "";

fgets(s, 255+1, stdin); // read s from user
puts( s_toupper(s) ); // convert s to uppercase and print it on the screen

Και δουλεύει διότι η puts() παίρνει ως όρισμά της char *, τον τύπο δλδ που βάλαμε να επιστρέφει η s_toupper() (με τιμή προφανώς το αλλαγμένο σε κεφαλαία s)
stamatiou έγραψε:Παιδιά, μπορεί κάποιος να μου πει πότε κάνουμε μία συνάρτηση pointer;
Δλδ:
Κώδικας: Επιλογή όλων
main() {
int *function(int a, int b) {

}
}