Amadeus7 Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 Κάνω ένα προγραμματάκι στη C όπου πρέπει να περάσω ένα δισδιάστατο πίνακα σε μία συνάρτηση η οποία πρέπει να είναι της μορφής >int A(int **G) στη main όμως όταν πάω να δώσω ως παράμετρο τον πίνακα μου λέει πως τον δίνω με λάθος τρόπο. τον περνώ έτσι >Α(G); πώς ακριβώς πρέπει να τον περάσω ώστε να δουλέψει?
Amadeus7 Δημοσ. 31 Οκτωβρίου 2009 Μέλος Δημοσ. 31 Οκτωβρίου 2009 To G ειναι "int **G" ? Είναι δηλωμένος έτσι >int G[rows][columns] τα rows, columns τα έχω κάνει define.
bxenos Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 > #include <stdio.h> #define X 10 #define Y 20 void fill(int A[][Y]){ //τροπος 1 for(size_t i=0;i<X;i++){ for(size_t j=0;j<Y;j++){ A[i][j] = i * Y + j; } } } void test(int A[X][Y]){//τρόπος 2 for(size_t i=0;i<X;i++){ for(size_t j=0;j<Y;j++){ if(A[i][j]!= i * Y + j) printf("error\n"); } } } int main(){ int A[X][Y]; fill(A); test(A); for(size_t i=0;i<X;i++){ for(size_t j=0;j<Y;j++){ if(A[i][j]!= i * Y + j) printf("error\n"); } } return 0; } εφόσων δεν είναι δυναμικά δημιουργημένος (που σημαίνει μονοδιάστατος), έχει συγκεκριμένη οριοθέτηση. Ολες οι διαστάσεις απο δεξια προς αριστερά πρέπει να δηλωθούν εκτος απο την πρωτη αριστερα που είναι προαιρετική (δεν τη νοιάζει τη C αν την ξεπεράσεις και "καταστρέψεις" τη μνήμη). Αν ήταν δυναμικά δημιουργημένος, θα αρκούσαν οι δείκτες.
Amadeus7 Δημοσ. 31 Οκτωβρίου 2009 Μέλος Δημοσ. 31 Οκτωβρίου 2009 τον έκανα δυναμικά και τέλιωσε το θέμα, ευχαριστώ πάρα πολύ για τη βοήθεια
Dark_Sage Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 [Αν ήταν δυναμικά δημιουργημένος, θα αρκούσαν οι δείκτες. δυναμικά δημιουργημένος εννοεις με Malloc & realloc?
bxenos Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 δυναμικά δημιουργημένος εννοεις με Malloc & realloc? Ναι. Οι πίνακες στη C είναι πάντα μονοδιάστατοι, αλλά ο compiler προσπαθεί να μας κάνει τη ζωή εύκολη όταν μπορεί. Στους δυναμικούς αγνώστου μεγέθους, δεν μπορεί να κάνει πολλά. Βέβαια υπάρχουν και οι δυναμικοί γνωστού μεγέθους (δες το παρακάτω typedef): π.χ. > #include <stdio.h> #include <assert.h> #include <string.h> #include <stdlib.h> typedef int mhtsos[10][32][34]; void foo(mhtsos x){ size_t i,j,k,a=0; printf("sizeof x=%u\n",sizeof(x)); for(i=0;i<10;i++) for(j=0;j<32;j++) for(k=0;k<34;k++) { assert(x[i][j][k] == 0); x[i][j][k] = a++; } } void chk(mhtsos x){ size_t i,j,k,a=0; printf("sizeof x=%u\n",sizeof(x)); for(i=0;i<10;i++) for(j=0;j<32;j++) for(k=0;k<34;k++) { assert(x[i][j][k] == a); a++; } } int main(){ mhtsos *m = malloc(sizeof(mhtsos)); assert(m); memset(m,0,sizeof(*m)); foo(*m); chk(*m); }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.