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

C δείκτες σε δομές


cyber_katsarida

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

Δημοσ.

μια βοήθεια παιδιά σε ένα κόλλημα που έφαγα

έχουμε μια δομή και ένα δείκτη που θέλουμε να δείχνει σε αυτή τη δομή.γράφουμε:

έστω

struct ena dok;

struct ena *ptr;

ptr = &dok;

 

αν έχουμε πίνακα τι κάνουμε;

struct ena dok[30];

struct ena *ptr;

 

???ptr=dok;

Δημοσ.

>#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.

Δημοσ.
βασικά εγώ το έχω κάνει με αυτον τον τρόπο:

 

#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.

 

Αν εξηγήσεις τι ακριβώς προσπαθείς να κάνεις ίσως να μπορέσω να βοηθήσω περισσότερο..

Δημοσ.

Όπως σου εξήγησα ο πίνακας στη C είναι ουσιαστικά ένας constant pointer που δεν αλλάζει θέση. Αυτό σημαίνει ότι το dok είναι ένας pointer.

 

Πχ:

>struct ena dok[10];

//αν του πεις μετά να κρατήσει σε μία άλλη μεταβλητή την πρώτη θέση του πίνακα μπορείς να το κάνεις με 2 τρόπους
struct ena x = dok[0];
struct ena y = *dok;
//τα x, y έχουν ακριβώς την ίδια τιμή, διότι ο dok δείχνει στην πρώτη θέση του πίνακα.

 

Αν μας πεις τι ακριβώς θέλεις να κάνεις ίσως να μπορέσουμε να σε βοηθήσουμε περισσότερο.

Δημοσ.

#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 αν δεν το εξηγώ καλά.ελπίζω να καταλάβατε

:(

Δημοσ.

Μπορεις να γραψεις και καλυτερα αυτο ως function για να μην χασεις την μπαλα με τους δεικτες :P

 

>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);
   }
}

Δημοσ.

ok ευχαριστώ.εκεί που μπερδεύτηκα βασικά ήταν το παράδειγμα του DiAvOl

 

>struct ena dok[30];
struct ena (*ptr)[30];

ptr = &dok;

 

σε αντίθεση με το δικό μου

 

>struct ena dok[30];
struct ena *ptr;

ptr = dok;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...