Δημοσιεύτηκε: 16 Φεβ 2010, 12:21
Αρχικα αν δηλωσεις int *Α[50] τοτε θελειςγια καθε Α[i]=(int *)malloc(n*sizeof(int));(οπου n ειναι το μεγεθος που θες να εχει καθε υποπινακας) στη malloc διοτι δεσμευεις χωρο για καθε int *. sizeof(int *) θα ηταν στην περιπτωση που δηλωσεις int **A οποτε A=(int **)malloc(n*sizeof(int *)); οπου εδω ουσιαστικα δηλωνεις τον αριθμο υποπινακων που θελεις να εχει ο δισδιαστατος πινκας στη συγκεκριμενη περιπτωση.Oποτε στη συνεχεια αν θελεις για καθε Α[i] = malloc ....κτλ.
Τωρα αν θελεις να περασεις ενα δυναμικο πινακα σε μια συναρτηση:
void f(int *a);/*το void δν ειναι φυσικα απαραιτητο μπορεις να εχεις οποιοδηποτε τυπο επιστροφης.*/ (σε περιπτωση που εχεις δηλωσει και δεσμευσει *Α)
void f(int **a); (σε περιπτωση που εχεις δηλωσει και δεσμευσει **Α)
void f(int *a[]); (σε περιπτωση που εχεις δηλωσει και δεσμευσει *Α[])
Για πολυδιαστατους πινακες δουλευει αναλογα.
Τελος αν θελεις να περασεις ενα pointer και να τον δεσμευσεις στη συναρτηση:
Στην πιο απλη περιπτωση δλδ αν εχεις δηλωσει int *A;
void f(int **A){
*(A[i])=(int *)malloc(12*sizeof(int));
}
Και στη main προφανως του περνας τη δ/νση δλδ f(&A);
Αυτα.
Τωρα αν θελεις να περασεις ενα δυναμικο πινακα σε μια συναρτηση:
void f(int *a);/*το void δν ειναι φυσικα απαραιτητο μπορεις να εχεις οποιοδηποτε τυπο επιστροφης.*/ (σε περιπτωση που εχεις δηλωσει και δεσμευσει *Α)
void f(int **a); (σε περιπτωση που εχεις δηλωσει και δεσμευσει **Α)
void f(int *a[]); (σε περιπτωση που εχεις δηλωσει και δεσμευσει *Α[])
Για πολυδιαστατους πινακες δουλευει αναλογα.
Τελος αν θελεις να περασεις ενα pointer και να τον δεσμευσεις στη συναρτηση:
Στην πιο απλη περιπτωση δλδ αν εχεις δηλωσει int *A;
void f(int **A){
*(A[i])=(int *)malloc(12*sizeof(int));
}
Και στη main προφανως του περνας τη δ/νση δλδ f(&A);
Αυτα.