karabouzouk... Δημοσ. 17 Μαΐου 2009 Δημοσ. 17 Μαΐου 2009 >#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 πως τους δηλώνουμε κλπ... Αν μου πείτε τι έχω λάθος σε αυτό το παράδειγμα που ανταλλάζει τουσ δύο αριθμούς πιστεύω θα καταλάβω... ευχαριστώ..
-nick- Δημοσ. 17 Μαΐου 2009 Δημοσ. 17 Μαΐου 2009 Καποια βασικα : Στον πινακα π.χ 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; } }
teo64x Δημοσ. 17 Μαΐου 2009 Δημοσ. 17 Μαΐου 2009 Εφόσον ο πίνακας είναι ήδη 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; } Αν δε ζητάς αυτό, μάλλον είπα βλακεία - επομένως, μπορείς να το αγνοήσεις.
karabouzouk... Δημοσ. 17 Μαΐου 2009 Μέλος Δημοσ. 17 Μαΐου 2009 Ευχαριστώ παίδες... Πιστεύω το κατάλαβα.. Δεν είχα ξεκαθαρίσει απλά ότι πίνακας= pointer και γι αυτό μπερδεύτικα...
jtsc21 Δημοσ. 17 Μαΐου 2009 Δημοσ. 17 Μαΐου 2009 Ευχαριστώ παίδες... Πιστεύω το κατάλαβα..Δεν είχα ξεκαθαρίσει απλά ότι πίνακας= pointer και γι αυτό μπερδεύτικα... για να ειμαστε απολυτα σωστοι, αυτο δεν ισχυει δηλαδη ειναι λαθος να συγχεουμε πινακες και pointers ειναι απλα συγγενεις να συμπληρωσω πως ειναι σημαντικο να κατλαβεις στο παραδειγμα σου πως στην συναρτηση anatal περνας σαν ορισμα εναν δεικτη που δειχνει στη διευθηνση που βρισκεται το στοιχειο a[0], οποτε αφου ο πινακας καταλαμβανει συνεχομενες θεσεις μνημηης, τοτε εχεις προσβαση και στις υπολοιπες θεσεις του
karabouzouk... Δημοσ. 17 Μαΐου 2009 Μέλος Δημοσ. 17 Μαΐου 2009 Ναι το έχω υπ όψην ότι τα στοιχεία είναι συνεχόμενα και μπορώ να έχω πρόσβαση σε όλα.. Και thanks για τη διευκρίνηση!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.