linuxs έγραψε:σαν τι κείμενο περιμένουμε να εμφανιστεί;;; για το printf λες;;;
Ναι γι' αυτό..άλλωστε αυτό δεν είναι και το θέμα του νήμματος;
linuxs έγραψε:σαν τι κείμενο περιμένουμε να εμφανιστεί;;; για το printf λες;;;
#include <stdio.h> /* προσθήκη της βασικής βιβλιοθήκης */
int calculate(void)
{
int i;
int p[9]; /* Ορισμός ενός 'πίνακα' 9 θέσεων! */
/* Τα στοιχεία του είναι απο [0 - 8] */
for(i=0; i<=3; i++) /* εκτέλεση μιας επανάληψης απο 0 έως ΚΑΙ 3 */
{
if(sizeof(int*) == 8) /* 64μπιτο σύστημα */
{
printf("64bit system!\n");
p[i*6 + 2] += 15;
printf("-> access possition: %d | write possition: %d\n", i*6+2, p[i*6+2]);
}else{ /* 32μπιτο σύστημα */
printf("32bit system!\n");
p[i*3 + 2] += 16;
printf("-> access possition: %d | write possition: %d\n", i*3 + 2, p[i*6+2]);
}
}
}
int main() /* κυρίως συνάρτηση*/
{
calculate(); /* καλούμε την calculate */
printf("Hello, World!\n"); /* εκτύπωση του μηνύματος */
return 0; /* επιστροφή του μηδενός */
}
/* =================================
Επιπλέον πληροφορίες...
===================================*/
/*
Σχετικά με το sizeof(): το sizeof() είναι μια συνάρτηση που μας επιστρέφει το μέγεθος των bytes στο
παράδειγμά μας των ακεραίων. Οπότε, στην *10* γραμμή τσεκάρουμε αν το μέγεθος των bytes των ακεραίων είναι 8.
Χωρίς να είμαι ΑΠΟΛΥΤΩΣ σίγουρος φαντάζομαι πως το μέγεθος που ένα σύστημα έχει καθορίσει για τους ακεραίους
αλλάζει απο 32μπιτο σε 64μπιτο. Οπότε στον 64μπιτο θα είναι 8. Απο εκεί και πέρα στην 12 και 14 γραμμή προσπαθούμε
να προσπελάσουμε κάποια ΔΙΑΦΟΡΕΤΙΚΑ κελιά με την χρήση του loop(που εκτελείται παραλληλα). Εάν δώσουμε λίγο
περισσότερο βαρύτητα στις τιμές που παίρνει θα δούμε οτι οι πιθανές τιμές για 64μπιτο είναι: 2,8,14,20 και στον
32μπιτο αντίστοιχα: 2,5,8,11. Μπορούμε πολύ εύκολα να δούμε οτι καθώς τρέχει το loop βγαίνουμε έξω απο τα όρια του πίνακα.
Γι' αυτό άλλωστε μας απιστρέφει και σκουπίδια.
*/
linuxs έγραψε:Γενικά γενικά...ως pointer φυσικα. Το κεφάλαιο που λείπει απο την συλλογή!Εδώ όμως;;;
έγραψε:Οπότε, στην *10* γραμμή τσεκάρουμε αν το μέγεθος των bytes των ακεραίων είναι 8.
linuxs έγραψε:Στο πρόγραμμά μας το * τι σημαίνει δηλαδή ;;; Γιατί το χρησιμοποιούμε;;;
sokoban4ever έγραψε:linuxs έγραψε:Στο πρόγραμμά μας το * τι σημαίνει δηλαδή ;;; Γιατί το χρησιμοποιούμε;;;
Μια διευκρίνηση
Tο sizeof(int*) υπολογίζει το μέγεθος του integer pointer
σε 32bit συστήματα είναι 4 bytes και σε 64bit είναι 8 bytes....
Το σύμβολο * είναι το σύμβολο του pointer( δείκτης )
και σημαίνει ότι δείχνει σε μια περιοχή στην μνήμη.
Χρησιμοποιείτε για να έχεις πρόσβαση σε δομές δεδομένων σε άλλους pointers και σε συναρτήσεις ( πχ για να τις εκτελείς )
επίσης επειδή είναι οργανωμένη και δομημένη η μνήμη και δεν είναι χύμα σαν μια λίμνη
και έτσι μπορείς να κάνει και pointer arithmetic και πολλά ωραία πράγματα
όμως θέλουν προσοχή γιατί εύκολα γίνονται πολύπλοκα τα προγράμματα...
http://www.cprogramming.com/tutorial/lesson6.html