Δημοσιεύτηκε: 05 Ιαν 2012, 00:45
από migf1
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;
}
O compiler ΔΕΝ θα παραπονεθεί στο παραπάνω, αλλά θα χτυπήσει error στο runtime.

Παράδειγμα 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;
}