Δημοσιεύτηκε: 30 Αύγ 2011, 16:29
από Star_Light
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;

Μι' πιάν'ς :lol:


Nαι το ειχαμε πει και στις λιστες αυτο. Δηλαδη η συναρτηση αυτη οριοθετει μια περιοχη η οποια δειχνει το μηκος της συμβολοσειρας.
Χειριζομαστε απευθειας σαν συμβολοσειρες .... οκ δηλαδη ειναι ενας δεικτης σε μια συμβολοσειρα ο *dst πχ?