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

call by reference στη C


karabouzouk...

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

Δημοσ.

>#include <stdio.h>

void antal(int *[]);

int main(){
   
   int a[]={1,2};
   printf("\n\n%d  ", a[0]);
   antal(&a[0]);
   printf("\n\n%d  ", a[0]);
   return 0;
}

void antal(int *a[]){
   int tmp;
   
   tmp=*a[0];
   *a[0]=*a[1];
   *a[0]=tmp;
   return;
}

 

 

 

Λίγη υπενθύμηση χρειάζομαι πώς δουλεύουν οι pointers πως τους δηλώνουμε κλπ...

Αν μου πείτε τι έχω λάθος σε αυτό το παράδειγμα που ανταλλάζει τουσ δύο αριθμούς πιστεύω θα καταλάβω...

ευχαριστώ..

Δημοσ.

Καποια βασικα : Στον πινακα π.χ int a[2]; ο δεικτης ειναι το a. Αυτον περνας στην συναρτηση που θες. το &a δειχνει τη διεθυνση που δειχνει το πρωτο στοιχειο του a. Το *a σου επιστρεφει το περιεχομενο που δειχνει ο δεικτης, δηλαδη το a[0]. Το *(a+1) σου επιστρέφει το περιέχομενο του a[1]. Το *(a+2) του a[2] κλπ..

 

 

 

δοκίμασε το έτσι :

 

>#include <stdio.h>

void antal(int a[2]){
   int tmp;
   
   tmp=*a;
   *a=*(a+1);
   *(a+1)=tmp;
   return 0;
}


int main(){
   
   int a[]={1,2};
   printf("\n\n%d  ", a[0]);
   antal(a);
   printf("\n\n%d  ", a[0]);
   return 0;
}


}

Δημοσ.

Εφόσον ο πίνακας είναι ήδη pointer, ποιος ο λόγος να χρησιμοποιήσεις pointer σε πίνακα; Αν απλά θέλεις να ανταλλάξεις τις δύο πρώτες τιμές του πίνακα, νομίζω μπορείς να κάνεις απλά το εξής.

 

>#include <stdio.h>
#include <stdlib.h>

void antal(int*);

int main(int argc, char** argv)
{
   int a[]={1,2};
   printf("Before swap:\t%d\n", a[0]);
   antal(a);
   printf("After swap:\t%d\n", a[0]);
   system("pause");
   return 0;
}

void antal(int* a)
{
   int tmp = a[0];
   a[0] = a[1];
   a[1] = tmp;
}

 

Αν δε ζητάς αυτό, μάλλον είπα βλακεία - επομένως, μπορείς να το αγνοήσεις.

Δημοσ.
Ευχαριστώ παίδες... Πιστεύω το κατάλαβα..

Δεν είχα ξεκαθαρίσει απλά ότι πίνακας= pointer και γι αυτό μπερδεύτικα...

 

για να ειμαστε απολυτα σωστοι, αυτο δεν ισχυει

δηλαδη ειναι λαθος να συγχεουμε πινακες και pointers

ειναι απλα συγγενεις:-)

 

να συμπληρωσω πως ειναι σημαντικο να κατλαβεις στο παραδειγμα σου πως στην συναρτηση anatal περνας σαν ορισμα εναν δεικτη που δειχνει στη διευθηνση που βρισκεται το στοιχειο a[0], οποτε αφου ο πινακας καταλαμβανει συνεχομενες θεσεις μνημηης, τοτε εχεις προσβαση και στις υπολοιπες θεσεις του

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

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

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