Δημοσιεύτηκε: 02 Ιούλ 2011, 23:13
Λογική η απορία!
Το θέμα είναι όταν θέλουμε να περάσουμε by reference τον ίδιον τον δείκτη, και όχι αυτό που δείχνει ο δείκτης. Όταν δηλαδή ΔΕΝ θέλουμε να περάσουμε σε μια συνάρτηση απλά τη διεύθυνση μνήμης του struct στο οποίο δείχνει ο δείκτης list (το οποίο struct ισούται με το 1ο στοιχειό της λίστας), αλλά θέλουμε να περάσουμε στη συνάρτηση τη διεύθυνση του δείκτη που δείχνει στο 1ο στοιχείο της λίστας.
Για αυτό όταν θέλουμε να περάσουμε σε μια συνάρτηση έναν δείκτη by reference, τότε μέσα στη συνάρτηση τον διαχειριζόμαστε ως δείκτη σε δείκτη (Node **list) και όταν καλούμε τη συνάρτηση στη main() της περνάμε σαν όρισμα τη διεύθυνση του δείκτη list.. .δηλαδή: pass_by_ref( &list ).
Αν το καταλαβαίνεις καλύτερα, σκέψου το κάπως έτσι: εφόσον ο list είναι τύπου Node * (δηλαδή δείκτης), η διεύθυνση του list είναι τύπου Node ** (δηλαδή δείκτης σε δείκτη).
Μέσα στην συνάρτηση πειράζουμε τον ίδιο τον δείκτη (τον μετακινούμε, το βάζουμε να δείχνει κάπου αλλού από εκεί που έδειχνε πριν καλέσουμε τη συνάρτηση) οπότε για να διατηρηθεί η αλλαγή που κάνουμε στον δείκτη αυτόν κάθε αυτόν, πρέπει να τον περάσουμε by reference.
Το θέμα είναι όταν θέλουμε να περάσουμε by reference τον ίδιον τον δείκτη, και όχι αυτό που δείχνει ο δείκτης. Όταν δηλαδή ΔΕΝ θέλουμε να περάσουμε σε μια συνάρτηση απλά τη διεύθυνση μνήμης του struct στο οποίο δείχνει ο δείκτης list (το οποίο struct ισούται με το 1ο στοιχειό της λίστας), αλλά θέλουμε να περάσουμε στη συνάρτηση τη διεύθυνση του δείκτη που δείχνει στο 1ο στοιχείο της λίστας.
Για αυτό όταν θέλουμε να περάσουμε σε μια συνάρτηση έναν δείκτη by reference, τότε μέσα στη συνάρτηση τον διαχειριζόμαστε ως δείκτη σε δείκτη (Node **list) και όταν καλούμε τη συνάρτηση στη main() της περνάμε σαν όρισμα τη διεύθυνση του δείκτη list.. .δηλαδή: pass_by_ref( &list ).
Αν το καταλαβαίνεις καλύτερα, σκέψου το κάπως έτσι: εφόσον ο list είναι τύπου Node * (δηλαδή δείκτης), η διεύθυνση του list είναι τύπου Node ** (δηλαδή δείκτης σε δείκτη).
Μέσα στην συνάρτηση πειράζουμε τον ίδιο τον δείκτη (τον μετακινούμε, το βάζουμε να δείχνει κάπου αλλού από εκεί που έδειχνε πριν καλέσουμε τη συνάρτηση) οπότε για να διατηρηθεί η αλλαγή που κάνουμε στον δείκτη αυτόν κάθε αυτόν, πρέπει να τον περάσουμε by reference.