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

Ερώτηση στην C σχετικά με την δημιουργία συνάρτησης


PBIRBAS

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

Δημοσ.

Αγαπητοί φίλοι,

Έχω μιά ερώτηση σχετικά με την δημιουργία συνάρτησης.

Συγκεκριμένα θα ήθελα να ρωτήσω ποια η χρησιμότητα του να περνάμε παραμέτρους δια τιμής και ποια του να περνάμε δια διευθύνσεως σε μια συνάρτηση;

Μπορεί κάποιος να μου δώσει και σχετικά παραδείγματα ;

 

Ευχαριστώ προκαταβολικά....

Δημοσ.

Προσπαθησε να φτιαξεις μια συναρτηση η οποια να ανταλαζει δεδομενα. Πχ εχεις 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);
  
}

 

Δημοσ.

Επιπλέον, το να χρησιμοιποιείς δέικτες αντί για μεταβλητές στις συναρτήσεις έχει να κάνει και με την χρήση μνήμης. π.χ.

>
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).

Δημοσ.

Σε όλα τα βιβλία προγραμματισμού αναφέρεται. Δεν έχει καμία σχέση με τη μνήμη, έχει σχέση με τα semantics της συνάρτησης (έχει side-effects, δεν έχει etc).

 

Είναι κλασσική ερώτηση σε homework...

Δημοσ.

να θυμασαι οτι η C εχει περασμα παραμετρων μονο κατα τιμη

οι pointers ειναι απλα περασμα των pointers κατα τιμη

 

οταν καταλαβεις πολυ καλα αυτο θα αρχισεις να αντιλαμβανεσαι το τι γινεται με τους pointers και με την γλωσσα γενικα

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...