Δημοσιεύτηκε: 30 Αύγ 2011, 16:29
migf1 έγραψε:
Για τον δείκτη save τώρα, όταν δουλεύεις τα strings απευθείας ως δείκτες (που ξεκινάνε δείχνοντας στην αρχή τους) τότε όταν γράψεις π.χ. s1++ για να προχωρήσεις στον 2ο χαρακτήρα του s1 έχασες την επαφή σου με την αρχή του s1. Στο τέλος του while-loop τόσο ο s1 όσο και ο s2 έχουν προχωρήσει (λόγω των s1++ και s2++) άρα έχεις χάσει την επαφή σου με τις αρχές των strings σου. Για το s2 σε αυτή την συνάρτηση δεν μας ενδιαφέρει, αλλά το s1 θέλουμε να το επιστρέψει η συνάρτηση. Όμως ο δείκτης s1 μετά το loop έχει πάει στο τέλος του string, και συγκεκριμένα δείχνει στον μηδενικό χαρακτήρα του s1, οπότε το: return s1 θα σου επέστρεφε έναν δείκτη στο τέλος του s1.
Για αυτόν ακριβώς τον λόγο λοιπόν, πριν ξεκινήσουμε το while-loop ορίζουμε έναν τοπικό δείκτη (τον save εδώ) τον οποίον το βάζουμε να δείχνει στην αρχή του s1 (save = s1). Άρα λοιπόν έχουμε σωσμένη την αρχή του s1, οπότε όταν τελειώσει το while-loop κι ο δείκτης s1 έχει φτάσει στο τέλος του string, εμείς επιστρέφουμε τον save, που δείχνει στην αρχή του string
Σημείωσε πως όταν δουλεύεις με μετρητές αντί για δείκτες, δεν το έχεις αυτό το πρόβλημα, γιατί το s1[i] δεν μετακινεί τον δείκτη s1 στη θέση i, απλά αναφέρεται στην θέση i... ισοδυναμεί δηλαδή με: s1+i και όχι με s1 = s1 + i;
Μι' πιάν'ς
Nαι το ειχαμε πει και στις λιστες αυτο. Δηλαδη η συναρτηση αυτη οριοθετει μια περιοχη η οποια δειχνει το μηκος της συμβολοσειρας.
Χειριζομαστε απευθειας σαν συμβολοσειρες .... οκ δηλαδη ειναι ενας δεικτης σε μια συμβολοσειρα ο *dst πχ?