Según las declaraciones int *dx = &x, **ddx = &dx;
i. x es de tipo: Entero
ii. dx es de tipo: Entero
iii. ddx es de tipo: Entero
iv. *dx es de tipo: Puntero a Entero
v. *ddx es de tipo: Puntero de Entero
vi. **dx es de tipo: Puntero a Puntero a Entero
Dadas las siguientes declaraciones int v[4] = 1, 3, 4, 5, *p; Qué valor
contiene:
i. V + 3: 5
ii. p después de la asignación p = &v[0]: 1
iii. *(p+3): 5
iv. p después de la asignación p = v: 1
v. p+3: 5
Aquí expongo las posibles respuestas, os agradezco que me corrigieseis, gracias.
Ahora, primera parte:
Para saber el tipo de una variable, normalmente te servirá con ver su declaración. Por ejemplo:
int *dx = &x;
No es int, es
int*. Es un putnero a int, una dirección que apunta a un entero. Por esa razón se le asigna un valor con &x. x es un entero, así que &x es la dirección de un entero (int*).
Fuera de la declaración, cuando haces "*dx" no estás diciendo que es un putnero. Al revés, estamos accediendo al valor que apunta. *(
int*) -> int.
Así, por ejemplo, *dx sería un entero (con el valor de x). Al poner * antes d euna variable (
salvo en la declaración), digamos que "bajas" un nivel. Al poner &, "subes" un nivel. &x -> int*.
El resto te las dejo revisar :p
Y la segunda parte:
El valor de V+3 no es 5. El valor de *(V+3) SÍ es 5. Pero si no pone el *, entonces es una dirección. Es la dirección de ese 5, pero no es ese 5. *(p+3) sí que es ese 5, por ejemplo, proque tiene el *.
p = &v[0], lo mismo. No es 1, es la dirección de 1 (es decir, es igual a V): p = v es lo mismo que p = &v[0] (Poner [_] también "baja" un nivel, ya que, al fin y al cabo, es como poner un *)
*(p+3) == p[3]Bueno, no ibas desencaminado. Solo tener cuidado con diferenciar la dirección de X con X. Y recordar que el significado de * y & en una declaración no es el mismo que fuera de ella.