Estoy mirando mi libro de texto y estoy un poco confundido acerca del código que está allí. En una parte, se está realizando la aritmética de punteros de la siguiente manera:void * vs. char * aritmética del puntero
void* bp;
...
bp = (void*)((char*)(bp)+16);
...
pero más adelante, que hacen lo siguiente:
void* bp;
...
bp = bp+16;
...
Siento que deben ser dos cosas diferentes pero que están tratando es como lo mismo. me siento así porque, por ejemplo, si tuviera que hacer un acceso a matriz (para una matriz de enteros, por ejemplo), que haría la siguiente
int* a = malloc(n*sizeof(int));
...
q = *(a+1);
...
en este caso, ¿no es así con el acceso a la próxima 4 bytes en la matriz de enteros y no el siguiente byte? Del mismo modo, creo que si tengo void * a, entonces * (a + 1) deberían ser los siguientes 4 bytes ... ¿O no es así? Gracias.
Ese segundo ejemplo no debe compilarse. –
@OliCharlesworth: No compilará (o al menos activará una advertencia) si compila en modo conforme. gcc no se está ajustando por defecto e implementa la aritmética 'void *' como una extensión. –