PBIRBAS Δημοσ. 29 Οκτωβρίου 2009 Δημοσ. 29 Οκτωβρίου 2009 Αγαπητοί φίλοι, Έχω μιά ερώτηση σχετικά με την δημιουργία συνάρτησης. Συγκεκριμένα θα ήθελα να ρωτήσω ποια η χρησιμότητα του να περνάμε παραμέτρους δια τιμής και ποια του να περνάμε δια διευθύνσεως σε μια συνάρτηση; Μπορεί κάποιος να μου δώσει και σχετικά παραδείγματα ; Ευχαριστώ προκαταβολικά....
Evgenios1 Δημοσ. 29 Οκτωβρίου 2009 Δημοσ. 29 Οκτωβρίου 2009 Προσπαθησε να φτιαξεις μια συναρτηση η οποια να ανταλαζει δεδομενα. Πχ εχεις int a=1,int b=2 , να το κανει a=2 ,b=1. Οταν το κανεις δες αυτη τη λυση η οποια ειναι μεσου διευθυνσης >void swap(void*,void*,int); #ifdef LA int _tmain(int argc, _TCHAR* argv[]) #else #include <stdio.h> #include <stdlib.h> int main(void) #endif { char str1[] = "Hello"; char str2[] = "lol"; printf("str1:%s\nstr2:%s\n",str1,str2); swap(str1,str2,3); printf("called swap\nstr1:%s\nstr2:%s\n",str1,str2); int a=1,b=2; swap(&a,&b,sizeof(int)); printf("\na:%d\nb:%d",a,; getchar(); return 0; } void swap(void* obj1,void* obj2,int size) { void* temp = malloc(size); memcpy(temp,obj2,size); memcpy(obj2,obj1,size); memcpy(obj1,temp,size); free(temp); }
pinball_elf Δημοσ. 29 Οκτωβρίου 2009 Δημοσ. 29 Οκτωβρίου 2009 Επιπλέον, το να χρησιμοιποιείς δέικτες αντί για μεταβλητές στις συναρτήσεις έχει να κάνει και με την χρήση μνήμης. π.χ. > typedef struct dataType { int id; char [16] name; int age; double height; double weight; char [32] address; int phonenumber; } dataType; int insertData (dataType data) { ... } int insertData (dataType * data) { ... } ... dataType newData; /* read new data */ ... if (!insertData (newData)) fprintf(stderr, "insert data error: not enough memory"); if (!insertData (&newData)) fprintf(stderr, "insert data error: not enough memory"); Στην δέυτερη περίπτωση κλήσης της συνάρτησης χρησιμοποιείται λιγότερη μνήμη από ότι στην πρώτη διότι: sizeof(dataType *) < sizeof(dataType).
PBIRBAS Δημοσ. 29 Οκτωβρίου 2009 Μέλος Δημοσ. 29 Οκτωβρίου 2009 Σωστά έχεις απόλυτο δίκιο Σε ευχαριστώ πολύ
dop Δημοσ. 30 Οκτωβρίου 2009 Δημοσ. 30 Οκτωβρίου 2009 Σε όλα τα βιβλία προγραμματισμού αναφέρεται. Δεν έχει καμία σχέση με τη μνήμη, έχει σχέση με τα semantics της συνάρτησης (έχει side-effects, δεν έχει etc). Είναι κλασσική ερώτηση σε homework...
TheMagician Δημοσ. 30 Οκτωβρίου 2009 Δημοσ. 30 Οκτωβρίου 2009 να θυμασαι οτι η C εχει περασμα παραμετρων μονο κατα τιμη οι pointers ειναι απλα περασμα των pointers κατα τιμη οταν καταλαβεις πολυ καλα αυτο θα αρχισεις να αντιλαμβανεσαι το τι γινεται με τους pointers και με την γλωσσα γενικα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.