Sto guardando attraverso il mio libro di testo e sono un po 'confuso su alcuni del codice che è lì dentro. In una parte, le proprie prestazioni aritmetica dei puntatori nel seguente modo:void * vs char * pointer arithmetic
void* bp;
...
bp = (void*)((char*)(bp)+16);
...
ma in seguito, che fanno il seguente:
void* bp;
...
bp = bp+16;
...
mi sento come dovrebbero essere due cose diverse, ma stanno trattando piace la stessa cosa mi sento in questo modo perché, per esempio, se si dovesse fare un accesso agli array (per un array di interi, per esempio), si dovrebbe effettuare le seguenti operazioni
int* a = malloc(n*sizeof(int));
...
q = *(a+1);
...
in questo caso, non sono io l'accesso alla prossima 4 byte nell'array intero e non il byte successivo? Allo stesso modo, sento che se ho vuoto * a, allora * (a + 1) dovrebbe essere il successivo 4 byte ... Oppure non è così? Grazie.
Questo secondo esempio non deve essere compilato. –
@OliCharlesworth: non compilerà (o almeno attiverà un avviso) se si compila in modalità conforme. gcc non si conforma di default e implementa l'aritmetica 'void *' come un'estensione. –