Δημοσιεύτηκε: 05 Ιαν 2012, 00:45
giannosfor έγραψε:migf1 έγραψε:Είναι ολίγον "μισή" η προηγούμενη απάντησή μου. Στη C αν δεν θέλεις ΔΕΝ χρησιμοποιείς pointers και γράφεις typed safe κώδικα. Στη Java ακόμα κι αν το θελήσεις, δεν μπορείς να έχεις pointersΠαράδειγμα περίπτωσης που ως "καλύτερο" μπορεί να οριστεί η ελευθερία στην επιλογή υλοποίησης.
Δε ξέρω πώς κάνεις typed sade κώδικα στη C
Παράδειγμα ΜΗ safe κώδικα:
- Κώδικας: Επιλογή όλων
#include <stdio.h>
struct test {
float x;
int y;
char s[10+1];
};
int main( void )
{
struct test rec, *prec = &rec;
void *p = NULL;
prec = p; /* <---- !!!!!!!!!! ----- */
printf("x = %g\n", prec->x); /* <------ BOOM !!!!!!!!!!*/
return 0;
}
Παράδειγμα safe κώδικα σε C...
- Κώδικας: Επιλογή όλων
#include <stdio.h>
struct test {
float x;
int y;
char s[10+1];
};
int main( void )
{
struct test rec, p = rec;
printf("x = %g\n", rec.x);
return 0;
}
έγραψε:και δε ξέρω που θα σου χρειαστεί να χρησιμοποιήσεις δείκτες στη Java.
Π.χ. για να παρακάμψεις εσωτερικούς ελέγχους της γλώσσας προς χάριν της ταχύτητας.
Ή για να διαβάσεις απευθείας τη διεύθυνση μιας περιοχής της μνήμης, π.χ. για να φτιάξεις έναν memory viewer...
- Κώδικας: Επιλογή όλων
#include <ctype.h>
#include <stdio.h>
typedef unsigned char BYTE;
int main( void )
{
unsigned int addr;
int i, n;
BYTE *ptr;
printf("Address of main function: %x\n", (unsigned int) main);
printf("Address of addr variable: %x\n", (unsigned int) &addr);
printf("\nEnter a (hex) address: ");
scanf("%x", &addr);
printf("Enter number of bytes to view: ");
scanf("%d", &n);
printf("\n");
printf(" Address Bytes Characters\n");
printf(" ------- ----------------------------- ----------\n");
ptr = (BYTE *) addr;
for (; n > 0; n -= 10) {
printf("%8X ", (unsigned int) ptr);
for (i = 0; i < 10 && i < n; i++)
printf("%.2X ", *(ptr + i));
for (; i < 10; i++)
printf(" ");
printf(" ");
for (i = 0; i < 10 && i < n; i++) {
BYTE ch = *(ptr + i);
if (!isprint(ch))
ch = '.';
printf("%c", ch);
}
printf("\n");
ptr += 10;
}
return 0;
}