La era de la informatica

Sunday, March 25, 2007

Solucion Problema 4

Hola de nuevo. Os traigo la solución al problema 4. Era muy sencillo, pero hay que saber bien que operadores tienen preferencia y como actua cada uno de ellos. En todos los ejemplos usamos un puntero e incrementamos 1, pero el resultado de las operaciones puede ser muy diferente.

Lo primero que os pedía era organizar las instrucciones y agruparlas en grupos de instrucciones que produzcan el mismo resultado. Luego explicar que hace cada grupo de instrucciones. Por tanto lo primero que voy a hacer es agruparlas:

Primer grupo:
x = *(p+1);
Segundo grupo:
x = *p+1;
x= (*p)+1;
Tercer grupo:
x = (*p)++;
Cuarto grupo:
x = *(p)++;
x = *p++;
x = *(p++);
x = (*p++);
Quinto grupo:
x = *++p;


Vamos a ver que hace cada grupo. Para ello voy a establecer unas condiciones iniciales.
p es un puntero que apunta a un array de 2 posiciones [1,7]. Tras la instrucción vamos a ver cual es el contenido de x y el contenido de p con la instruccion printf("x=%d,p=%d\n",x,*p);

El primer grupo da como resultado:
x=7, p=1
Es decir, que primero aumentamos el puntero p a la segunda posicion, el contenido lo asignamos a x y p no se modifica.
El segundo grupo da como resultado:
x=2, p=1
Es decir, que a x se le asigna lo que apunte p mas 1, y p no se modifica.
El tercer grupo da como resultado:
x=1, p=2
Es decir, que a x se le asigna lo que vale p y luego se suma al contenido de p un 1.
El cuarto grupo da como resultado:
x=1, p=7
Es decir, se asigna a x lo que vale p y luego se aumenta el puntero p en una posicion
el quinto grupo da como resultado:
x=7, p=7
Es decir, que se incrementa en 1 la posicion de p y se asigna a x el valor.

Como veis las operaciones eran parecidas, pero producen resultados dispares. La moraleja de esto es que lo mas recomendable en C es usar siempre un convenio, utilizar siempre el mismo tipo de instrucciones para no dar lugar a confusiones. Las mas comunes suelen ser *p++ y (*p)++. La primera para recorrer un array y la segunda para guardar el valor e incrementar el valor del contenido de p.

Hasta la proxima

0 Comments:

Post a Comment

<< Home