Δημοσιεύτηκε: 28 Ιουν 2011, 00:57
από Star_Light
migf1 έγραψε:Εχμ, αυτό δεν είναι συνδεδεμένη λίστα. Είναι μια περίεργη...μίξη! Δηλώνεις κι αρχικοποιείς έναν πίνακα, κατόπιν δημιουργείς μια λίστα που δεν τις περνάς κανένα στοιχείο στον κάθε της κόμβο και μετά τυπώνεις τα περιεχόμενα του πίνακα με τη χρήση ενός βοηθητικού pointer. Δηλαδή ο κώδικάς σου λειτουργεί απαράλλαχτα και χωρίς τα περί λίστας:

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

#include<stdio.h>

typedef struct
{
int id;
char name[7];
struct customer *next;
} customer;

int main ()
{
int i;
customer array[ 3 ] = { {1,"Kwstas"}, {2,"Nikos"}, {3,"Stelios"} };
/*
customer *head , *new;
// customer *next; // unused
head = NULL;

for(i=0; i<3; i++)
{
new = (struct customer *) malloc( sizeof(customer) );
new->next = head;
head = new;
}
*/
customer *new;
for (new=array; new < &array[3]; new++)
printf("%d %u %s\n", new->id , new->next , new->name);

return 0;
}



Το "δείκτης σε δείκτης" σαν ορολογία το χρησιμοποιούμε για διπλούς δείκτες (π.χ.: customer **pp). To new->next = head είναι 2 μεταβλητές μονών δεικτών (customer *), που τους βάζεις να δείχνουν στο ίδιο μέρος ("κουτί") της μνήμης.



Aρχικοποιω εναν πινακα οπου καθε στοιχειο του ειναι μια υλοποιηση της παραπανω δομης. Ετσι δεν ειναι???? To new->next = head είναι 2 μεταβλητές μονών δεικτών (customer *) μου λες αλλα εφοσον εχω δηλωσει 3 δεικτες ρε παιδι μου.... *next *head *new... αυτο δεν καταλαβαινω. Καθαρο μυαλο εχω απλα με απογοητευει καποιες φορες που θελω τοσο διαβασμα για να τα παρω.