cyber_katsarida Δημοσ. 25 Δεκεμβρίου 2008 Δημοσ. 25 Δεκεμβρίου 2008 μια βοήθεια παιδιά σε ένα κόλλημα που έφαγα έχουμε μια δομή και ένα δείκτη που θέλουμε να δείχνει σε αυτή τη δομή.γράφουμε: έστω struct ena dok; struct ena *ptr; ptr = &dok; αν έχουμε πίνακα τι κάνουμε; struct ena dok[30]; struct ena *ptr; ???ptr=dok;
GrandGamer Δημοσ. 25 Δεκεμβρίου 2008 Δημοσ. 25 Δεκεμβρίου 2008 ο πίνακας στην C είναι ουσιαστικά ένας σταθερός pointer οπότε το μόνο που έχεισ να κάνεις είναι ptr = dok;
Επισκέπτης Δημοσ. 27 Δεκεμβρίου 2008 Δημοσ. 27 Δεκεμβρίου 2008 >#include <stdio.h> struct ena { int i; }; int main(void) { struct ena dok[30]; struct ena (*ptr)[30]; ptr = &dok; return 0; } Πρόσεξε την χρήση των παρενθέσεων στην δήλωση της μεταβλητής ptr. Εάν ήταν struct ena *ptr[30] θα εννοούσα έναν πίνακα 30 δεικτών τύπου struct ena ενώ η παραπάνω δήλωση (στο παράδειγμα) σημαίνει ένας δείκτης που δέιχνει σε πίνακα 30 θέσεων τύπου struct ena.
cyber_katsarida Δημοσ. 27 Δεκεμβρίου 2008 Μέλος Δημοσ. 27 Δεκεμβρίου 2008 βασικά εγώ το έχω κάνει με αυτον τον τρόπο: #include <stdio.h> struct ena { int i; }; int main(void) { struct ena dok[30]; struct ena *ptr; ptr = dok; } είναι λάθος αυτό;
Επισκέπτης Δημοσ. 27 Δεκεμβρίου 2008 Δημοσ. 27 Δεκεμβρίου 2008 βασικά εγώ το έχω κάνει με αυτον τον τρόπο: #include <stdio.h> struct ena { int i; }; int main(void) { struct ena dok[30]; struct ena *ptr; ptr = dok; } είναι λάθος αυτό; Ανάλογα με το τι ακριβώς θέλεις να κάνεις. Συντακτικά είναι σωστό, η διαφορά είναι ότι εσύ δηλώνεις έναν pointer που δείχνει στο πρώτο στοιχείο του πίνακα dok ενώ εγώ δήλωσα έναν pointer που δείχνει σε έναν πίνακα 30 στοιχείων τύπου struct ena. Αν εξηγήσεις τι ακριβώς προσπαθείς να κάνεις ίσως να μπορέσω να βοηθήσω περισσότερο..
GrandGamer Δημοσ. 28 Δεκεμβρίου 2008 Δημοσ. 28 Δεκεμβρίου 2008 Όπως σου εξήγησα ο πίνακας στη C είναι ουσιαστικά ένας constant pointer που δεν αλλάζει θέση. Αυτό σημαίνει ότι το dok είναι ένας pointer. Πχ: >struct ena dok[10]; //αν του πεις μετά να κρατήσει σε μία άλλη μεταβλητή την πρώτη θέση του πίνακα μπορείς να το κάνεις με 2 τρόπους struct ena x = dok[0]; struct ena y = *dok; //τα x, y έχουν ακριβώς την ίδια τιμή, διότι ο dok δείχνει στην πρώτη θέση του πίνακα. Αν μας πεις τι ακριβώς θέλεις να κάνεις ίσως να μπορέσουμε να σε βοηθήσουμε περισσότερο.
cyber_katsarida Δημοσ. 28 Δεκεμβρίου 2008 Μέλος Δημοσ. 28 Δεκεμβρίου 2008 #include<stdio.h> main() { struct machine { int code; int etos; int kostos; int total_kostos; }; struct machine machin[30]; int i; for(i=0;i<30;i++) { if (machin.etos >2000) printf("%d-%d-%d-%d",machin.code,machin.etos,machin.kostos,machin.total_kostos); } Έχω αυτό το κομμάτι κώδικα και αυτό που θέλω βασικά είναι η for να γίνει με χρήση δεικτών και όχι με μεταβλητές που είναι τώρα. (Πιθανόν να το υλοποιήσω και σε συνάρτηση γι αυτό χρειάζομαι τον δείκτη στη δομή-αλλα ας το αφήσουμε αυτό).αλά το πρόβλημα μου είναι πως θα κάνω τον δείκτη να δείχνει στον πίνακα [30] ο κώδικας παρακάτω είναι σωστός ή όχι: #include<stdio.h> main() { struct machine { int code; int etos; int kostos; int total_kostos; }; struct machine machin[30]; struct machine *mach; mach=machine; int i; for(i=0;i<30;i++) { if (mach->etos_agoras >2000) printf("%d-%d-%d-%d",mach->code,mach->etos,mach->kostos,mach->total_kostos); mach++; } Sorry αν δεν το εξηγώ καλά.ελπίζω να καταλάβατε
afnman Δημοσ. 31 Δεκεμβρίου 2008 Δημοσ. 31 Δεκεμβρίου 2008 Μπορεις να γραψεις και καλυτερα αυτο ως function για να μην χασεις την μπαλα με τους δεικτες >void func(struct machine Array[]) { for(i=0;i<30;i++) { if (Array[i].etos_agoras > 2000) printf("%d-%d-%d-%d",Array[i].code,Array[i].etos,Array[i].kostos,Array[i].total_kostos); } }
cyber_katsarida Δημοσ. 2 Ιανουαρίου 2009 Μέλος Δημοσ. 2 Ιανουαρίου 2009 ok ευχαριστώ.εκεί που μπερδεύτηκα βασικά ήταν το παράδειγμα του DiAvOl >struct ena dok[30]; struct ena (*ptr)[30]; ptr = &dok; σε αντίθεση με το δικό μου >struct ena dok[30]; struct ena *ptr; ptr = dok;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.