Πινακες και Δεικτες στη C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Πινακες και Δεικτες στη C

Δημοσίευσηαπό priest91 » 15 Ιαν 2010, 15:07

Καλησπέρα παιδιά,επειδή δεν εχούμε κάνει ακόμα δείκτες στη σχολή και τους μαθαίνω μόνος μου,έχω μια απόρια στους δισδιάστατους πίνακες..

Θα ήθελα να μου γραψετε ενα μικρο παραδειγμα,οπου μια συναρτηση θα δεχεται ως ορισμα εναν δισδιαστατο πινακα τον οποιο να μπορω να τον επεξεργαστω στη συναρτηση και να τον επιστρεψω στην main().Ευχαριστω προκαταβολικα..
priest91
babeTUX
babeTUX
 
Δημοσιεύσεις: 17
Εγγραφή: 29 Νοέμ 2009, 16:20
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό Nisok » 15 Ιαν 2010, 20:26

Δεν γίνεται αυτό που ζητάς.
Μπορείς να βάλεις ως όρισμα ένα πίνακα, αλλά δεν μπορείς να τον επιστρέψεις.
Αυτό που μπορείς να κάνεις είναι η κλίση αναφοράς. Βάζεις όρισμα ένα δείκτη σε πίνακα επεξεργάζεσαι τον δείκτη
και δεν επιστρέφεις τίποτα, γιατί οι αλλαγές γίνονται αμέσως.

Ορίστε και ένα απλό παράδειγμα.

Κώδικας: Επιλογή όλων
int main()
{
int number = 5;
cubeByReference(&number);
printf("%d", number);
}

Κώδικας: Επιλογή όλων
void cubeByReference(int *nPtr)
{
*nPtr=*nPtr* *nPtr * *nPtr;
}


Έξοδος: 125
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό Nisok » 15 Ιαν 2010, 20:29

Βέβαια... Επεκτείνοντας το σκεπτικό δείκτης είναι ο ίδιος ο πίνακας ;-P.
Για περισσότερα απλά σκέψου....
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό priest91 » 15 Ιαν 2010, 20:46

Μαλιστα καταλαβα το παραδειγμα αλλα σε ενα δισδιαστατο πινακα μπερδευομαι:S
priest91
babeTUX
babeTUX
 
Δημοσιεύσεις: 17
Εγγραφή: 29 Νοέμ 2009, 16:20
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό Nisok » 15 Ιαν 2010, 20:54

:-S Γιατί δεν χρειάζεται να αλλάξεις τίποτα.

Κώδικας: Επιλογή όλων
int main()
{
int[2][2] number = {{5, 5}, {5, 5}};
cubeByReference(&number);
printf("%d", number);
}


Κώδικας: Επιλογή όλων
void cubeByReference(int *nPtr)
{
*nPtr[0][0]=*nPtr[0][0]* *nPtr[0][0] * *nPtr[0][0];
*nPtr[1][0]=*nPtr[1][0]* *nPtr[1][0] * *nPtr[1][0];
*nPtr[0][1]=*nPtr[0][1]* *nPtr[0][1] * *nPtr[0][1];
*nPtr[1][1]=*nPtr[1][1]* *nPtr[1][1] * *nPtr[1][1];
}


Έξοδος: 125 125
125 125
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό Nisok » 15 Ιαν 2010, 20:56

Καλά το printf είναι λάθος.. Αλλά δεν έχει σχέση με αυτά που λέμε.
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό priest91 » 15 Ιαν 2010, 21:02

Οκ ευχαριστω παρα πολυ!!!γιου αρ δε μπεστ!! :D
priest91
babeTUX
babeTUX
 
Δημοσιεύσεις: 17
Εγγραφή: 29 Νοέμ 2009, 16:20
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό priest91 » 15 Ιαν 2010, 21:41

Βασικα το πρωτο παραδειγμα τρεχει κανονικα αλλα το δευτερο μου βγαζει errors..:S
priest91
babeTUX
babeTUX
 
Δημοσιεύσεις: 17
Εγγραφή: 29 Νοέμ 2009, 16:20
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό theseas » 16 Ιαν 2010, 04:28

Δες αυτό το πρόγραμμα μια:

Κώδικας: Επιλογή όλων

#include <stdio.h>

/*
* rsize = row size
* csize = column size
*/
void square(int num[2][2], int rsize, int csize)
{
int i, j;
for(i=0; i<rsize; i++)
{
for(j=0; j<csize; j++)
{
num[i][j] *= num[i][j];
}
}
}

/*
* rsize = row size
* csize = column size
*/
void print(int ar[2][2], int rsize, int csize)
{
int i, j;
for(i=0; i<rsize; i++)
{
for(j=0; j<csize; j++)
{
printf("array[%d][%d] = %d\n", i, j, ar[i][j]);
}
}
puts("\n");
}

int main()
{
int array[2][2] = {{1, 2}, {3, 4}};

print(array, 2, 2);
square(array, 2, 2);
print(array, 2, 2);

return 0;
}


Βασικά στην C οι πίνακες είναι περίπου ίδιοι με τους δείκτες οπότε δεν χρειάζεται να επιστρέφεις πίνακα
από συνάρτηση γιατί ότι αλλαγές κάνεις στην συνάρτηση γίνονται πάνω στον αρχικό πίνακα!

Το μέγεθος του πίνακα δεν είναι υποχρεωτικό να περαστεί ως όρισμα στην συνάρτηση
αλλά καλό είναι να το βάζεις γιατί σε γλυτώνει από το να βγεις έξω από τα όρια του πίνακα!!! ;)

sɐəsəɥʇ ®
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό: Ubuntu 9.10
Προδιαγραφές ⇛ Επεξεργαστής: Intel core 2 Duo E8400 │ Μνήμη: 2GB│ Κάρτα Γραφικών: Intel GMA 3100 │ Κάρτα Ήχου: Creative Audigy LS │ Οθόνη & Ανάλυση: 15 ίντσες 1024x768
Άβαταρ μέλους
theseas
babeTUX
babeTUX
 
Δημοσιεύσεις: 14
Εγγραφή: 13 Αύγ 2009, 16:13
Τοποθεσία: Αθήνα, Πετρούπολη
IRC: theseas
Εκτύπωση

Re: Πινακες και Δεικτες στη C

Δημοσίευσηαπό Nisok » 16 Ιαν 2010, 13:33

Σβήσε την printf στο δεύτερο γιατί είναι λάθος.
Και κάνε πάλι compile , και άμα έχει errors ανέβασέ τα να τα δώ.
Από το μυαλό μου τα βγάζω λογικό είναι να μην έχω προσέξει κάτι. :oops:
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι