marcelogarberoglio / PI

Para realizar consultas
5 stars 0 forks source link

Autoevaluación 4. Pregunta 3 #148

Open Jalbertonisalini opened 1 year ago

Jalbertonisalini commented 1 year ago

Hola Marcelo, cómo va? Aprovecho este ejercicio para pedirte si podes explicarme por ahi con un ejemplo o algo bien como funcionan los casteos explícitos de los punteros. El código que te dejo a continuación es el que me hizo darme cuenta que por ahi no entendí muy bien la idea: Lo que hace es recorreer a v[] como si fuese un vector de ints? Es decir que al caminar por v con mi puntero camino como si fuese con int?

Perdón las molestias, al ser una pregunta teórica sino te la pregunto el Lunes al comenzar la clase.

include

int main(void) { char v[] = {2,1,0,0,4,0,0,0}; int p = (int ) v; printf("%d\n", p + (p+1));

return 0;
}

marcelogarberoglio commented 1 year ago

El casteo de punteros funciona como cualquier casteo, al hacer int p = (int ) v; le estamos diciendo al compilador: "ya se que v es la dirección de un char, pero mirala como la dirección de un int y asignala a p". Entonces, vomo bien decís, al usar p para recorrer el vector se recorre como vector de ints.

El por qué de la salida está explicado en la autoevalacion:

Para el vector se crean en la memoria los siguientes valores en hexadecimal 02 01 00 00 04 00 00 00.

Al hacer apuntar un int* a la primer posición, toda desreferencia a partir de ese puntero nos dará un int, que ocupa 4 bytes.

En las PCs los valores de más de un byte se almacenan en formato little-endian, por lo que al "levantar" *p se obtiene un int con el formato en hexa 00 00 01 02, que equivale a 256 + 2 = 258

Al levantar el segundo entero se obtiene 00 00 00 04, que es 4

Por lo tanto el valor de la suma será 258 + 4 = 262