geo1st487 Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 Μπορει καποιος να μου πει τι κανει στον παρακατω κωδικα το *p++ = *p++ = 1; ; Ευχαριστω static void Main(string[] args) { unsafe { int* fib = stackalloc int[100]; int* p = fib; *p++ = *p++ = 1; for (int i = 2; i < 100; ++i, ++p) *p = p[-1] + p[-2]; for (int i = 0; i < 20; ++i) Console.WriteLine(fib[i]); } }
geo1st487 Δημοσ. 28 Μαΐου 2013 Μέλος Δημοσ. 28 Μαΐου 2013 Βάζει την τιμή 1 στα δύο πρώτα στοιχεί του fib... Εναλλακτικα πως αλλιως μπορει να γραφει; Πως θα μπορουσα να βαλω μια τιμη στο στοιχειο 10 του fib;
albNik Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 Υπάρχει λόγος που το κάνεις με unsafe? Εναλακτικά int [] fib=new int[100]; fib[0]=fib[1]=1; for(int i=2 i<20; i++) fib= fib[i-1]+fib[i-2]; Καλύτερα long διοτι οι αριθμοί αυξάνονται πολύ απότομα. 2
geo1st487 Δημοσ. 28 Μαΐου 2013 Μέλος Δημοσ. 28 Μαΐου 2013 albNik δεν υπαρχει λογος που το κανω με unsafe απλως προσπαθω να μαθω. Χωρις unsafe μπορω να το κανω αλλα μπερδευομαι με unsafe. Εναλλακτικα πως αλλιως μπορει να γραφει εννοουσα να βαλω την τιμη 1 στα δυο πρωτα στοιχεια του fib με unsafe Δηλ πως αλλιως μπορει να γραφει το *p++ = *p++ = 1; και πως γινεται με unsafe παντα να βαλω μια τιμη στο στοιχειo 10 του fib;
albNik Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 Προσωπικά δεν μου έχει χρειαστεί η unsafe καθόλου σε c#. Goto έχω χρησιμοποιήσει 1-2 φορες Επισης βάλε checked { } για να πετάξει overflow exception Αλλιως θα βλεπεις αρνητικά fib. To fib του 90+ δεν χωράει ούτε σε long 2^64. Αντε να δοκιμάσω μια unsafe p[0] = 1; p[1] = 1; p += 10; p[0] = 1234; //p[12]=1234 ειναι 0 αλλα δείχνει στο 12 Πιο unsafe τωρα *p = 1; p++; *p = 1; p += 9; *p = 1234; //p[10]
Apoll Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 albNik δεν υπαρχει λογος που το κανω με unsafe απλως προσπαθω να μαθω. Χωρις unsafe μπορω να το κανω αλλα μπερδευομαι με unsafe. WFT. Μάθε να προγραμματίζεις σωστά χωρίς να γράφεις μη ασφαλή κώδικα. Η μόνη χρήση του 17 χρόνια ως επαγγελματίας, είναι όταν γράφω interface ή manifest για κάποιο hardware.
geo1st487 Δημοσ. 28 Μαΐου 2013 Μέλος Δημοσ. 28 Μαΐου 2013 Δεν ξερω αν χανω αδικα την ωρα μου με unsafe αλλα δοκιμασα τον ιδιο κωδικα συμφωνα με αυτα εγραψες και οι κωδικες τωρα ειναι οι παρακατω. Το θεμα ειναι οτι εμφανιζουν και οι δυο διαφορετικα αποτελεσματα (τεραστια νουμερα) σε σχεση με τον πρωτο που ποσταρα που χρησιμοποιουσε το *p++ = *p++ = 1; Τρεξε αν θελεις και εσυ τον πρωτο κωδικα που ποσταρα στην αρχη και μετα τους παρακατω για να το διαπιστωσεις. static void Main(string[] args) { unsafe { int* fib = stackalloc int[100]; int* p = fib; // *p++ = *p++ = 1; p[0] = 1; p[1] = 1; for (int i = 2; i < 100; ++i, ++p) *p = p[-1] + p[-2]; for (int i = 0; i < 20; ++i) Console.WriteLine(fib[i]); } } static void Main(string[] args) { unsafe { int* fib = stackalloc int[100]; int* p = fib; // *p++ = *p++ = 1; *p = 1; p++; *p = 1; for (int i = 2; i < 100; ++i, ++p) *p = p[-1] + p[-2]; for (int i = 0; i < 20; ++i) Console.WriteLine(fib[i]); } } WFT. Μάθε να προγραμματίζεις σωστά χωρίς να γράφεις μη ασφαλή κώδικα. Η μόνη χρήση του 17 χρόνια ως επαγγελματίας, είναι όταν γράφω interface ή manifest για κάποιο hardware. Apoll προσπαθω να μαθω, δεν φτιαχνω προγραμμα χρησιμοποιωντας unsafe κωδικα. Μπορει να μη χρειαστει ποτε αλλα καλο ειναι να ξερω.
albNik Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 Μετα τα p[0]=1; p[1]=1; βάλε p+=2; Και στο δευτερο μετα το *p=1; p++; *p=1; βαλε άλλο ένα p++; Για να προχωράει ο δεικτης.
παπι Δημοσ. 28 Μαΐου 2013 Δημοσ. 28 Μαΐου 2013 Δεν ξερω αν χανω αδικα την ωρα μου με unsafe αλλα δοκιμασα τον ιδιο κωδικα συμφωνα με αυτα εγραψες Σιγουρα χανεις τον χρονο σου με το fibonacci 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα