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

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

Δημοσ.

Καλησπέρα παιδιά!!

 

Χρειαζόμουν για μια άσκηση να δεσμεύσω δυναμικά ένα δυσδιάστατο πίνακα, και αφόυ έψαξα βρήκα την εξής μέθοδο:

 

 

>
...
float **a;
a = new float *[rows];
for (int i=0; i<rows; i++) 
   a[i] = new float[cols];
...

 

Ψιλο-κατάλαβα πως λειτουργεί, το θέμα είναι πως δεν καταλαβαίνω γιατί πρέπει να γράψω new float *[rows]?

Τι ακριβώς κάνει αυτή η γραμμή, και ειδικά ο αστερίσκος (ορίζει τι, ως δείκτη; )

 

Ευχαριστώ :D

Δημοσ.

http://www.cplusplus.com/reference/std/new/operator%20new%5B%5D/

 

Aυτό σε βοηθάει περισσότερο?

>    scanf("%d",&N);  
 
   int **sp = (int**) calloc (N,sizeof(int*));  
 
   for (i = 0; i < N; i++) {  
       sp[i] = (int*) calloc (2,sizeof(int));  
   } 

 

Ουσιαστικά κανει δέσμευση τόσων θέσεων μνήμης όσες και το rows.

YΓ: Δεν ξερω αν βοηθαω αλλα φανταζομαι οτι αυτο κανει η new.

Δημοσ.
Καλησπέρα παιδιά!!

 

Χρειαζόμουν για μια άσκηση να δεσμεύσω δυναμικά ένα δυσδιάστατο πίνακα, και αφόυ έψαξα βρήκα την εξής μέθοδο:

 

 

...

float **a;

a = new float *[rows];

for (int i=0; i<rows; i++)

a = new float[cols];

...

 

 

 

Ψιλο-κατάλαβα πως λειτουργεί, το θέμα είναι πως δεν καταλαβαίνω γιατί πρέπει να γράψω new float *[rows]?

Τι ακριβώς κάνει αυτή η γραμμή, και ειδικά ο αστερίσκος (ορίζει τι, ως δείκτη; )

 

Ευχαριστώ :D

 

Με την εντολή a = new float *[rows]; ουσιαστικά δεσμεύεις χώρο για έναν πίνακα τύπου pointer σε float, μεγέθους rows. Δηλαδή κάθε κελί του πίνακα θα είναι ένας pointer σε float.

Και με την εντολή a = new float[cols]; δεσμεύεις χώρο για κάθε έναν από τους προηγούμενους pointers σε έναν float πίνακα μεγέθους cols.

 

Γενικά στη C/C++ οι 2-διάστατοι (και αντίστοιχα οι d-διάστατοι) αποτελούνται από μονοδιάστατους πίνακες. Για παράδειγμα οι 2-διάστατοι πίνακες αποτελούνται από έναν μονοδιάστατο που το κάθε κελί του είναι ένας άλλος μονοδιάστατος πίνακας. Έτσι γίνεται και στην παραπάνω δημιουργία.

Δημοσ.

Να συμπληρώσω μόνο πως ένας βασικός λόγος που στην C++ και στη C όλοι οι πίνακες υλοποιούνται μονοδιάστατα είναι για να διευκολύνεται η αριθμητική δεικτών (pointer arithmetic).

Δημοσ.

Με την εντολή a = new float *[rows]; ουσιαστικά δεσμεύεις χώρο για έναν πίνακα τύπου pointer σε float, μεγέθους rows. Δηλαδή κάθε κελί του πίνακα θα είναι ένας pointer σε float.

Και με την εντολή a = new float[cols]; δεσμεύεις χώρο για κάθε έναν από τους προηγούμενους pointers σε έναν float πίνακα μεγέθους cols.

 

Γενικά στη C/C++ οι 2-διάστατοι (και αντίστοιχα οι d-διάστατοι) αποτελούνται από μονοδιάστατους πίνακες. Για παράδειγμα οι 2-διάστατοι πίνακες αποτελούνται από έναν μονοδιάστατο που το κάθε κελί του είναι ένας άλλος μονοδιάστατος πίνακας. Έτσι γίνεται και στην παραπάνω δημιουργία.

 

Ευχαριστώ πολύ!!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...