Sobre un programa en C, urgente!

Hola tengo una dudilla con el uso de punteros, me gustaría que me la resolvieras, el programa es el siguiente:
main()
{
int array[5]={1,2,3,4,5};
int *array_ptr;
int valor;
array_ptr=&array[1];
valor=array_ptr[1];
printf("%d", valor);
}
Me da como salida en este programa 3 y a veces otras cosas, no entiendo yo creo que me tendría que dar 2, porque el puntero apunta a array[1], no entiendo que pasa, porque el puntero lo uso como un array, bueno no se me gustaría que me dijeses cual es el fallo.
Además al hacer mas o menos lo mismo en otro programa me hace lo q yo quiero.
main()
{
int array[5]={1,2,3,4,5};
int *array_ptr;
int valor;
array_ptr=&array[0];
valor1=array_ptr[0];
printf("%d", valor);
}
Aquí me da como salida 1 q es lo q creo q me tiene q dar, no entiendo me gustaría q me aclararas por qué en el primer programa no me da la salida esperada, muchas gracias, me gustaría también q me contestases rápido porque tengo examen el sábado y lo necesito muchas gracias.
Respuesta
1
Primero tienes que aprender una cosa acerca de los arreglos en el lenguaje C.
El primer elemento de un arreglo se encuentra en la posición cero, es decir: array[0] es el primer elemento. Si tu arreglo tiene 10 elementos el ultimo se encontrara en la posición 9, es decir: array[9] es el ultimo elemento.
<<<< EXPLICACION DEL PRIMER PROGRAMA >>>>
Una vez comprendido esto voy a empezar con el primer programa:
La linea: array_ptr=&array[1]; hace que array_ptr "apunte" al >>SEGUNDO<< elemento del arreglo array, o sea al lugar donde se encuentra el numero "2".
Ahora la siguiente linea a esa: valor=array_ptr[1]; hace que valor tome el contenido de la >>SEGUNDA<< posicion (recuerda que la primera es la posicion 0) de donde apunta array_ptr, o sea que la variable valor tendra el valor de "3". Ahora, al correr este programa SIEMPRE te debería dar como resultado "3".
Existen muchos "trucos" que puedes hacer en C, debido a su gran flexibilidad en el manejo de arreglos, por ejemplo:
Despues de la linea: array_ptr=&array[1];
puedes poner: valor = array_ptr[-1]; y esto asignara "1" a la variable "valor". Esto es debido a que array_ptr apunta a la dirección donde se encuentra el valor "2". Y la posición anterior a esta, o sea la posición -1, contiene el valor "1".
0 1 2 3 4 << posiciones de los elementos
-----------------------------
| 1 | 2 | 3 | 4 | 5 | << contenido
-----------------------------
^
^- "array_ptr" apunta a esta dirección
array_ptr[-1] = 1
array_ptr[0] = 2
array_ptr[1] = 3
...
<<<< EXPLICACION DEL SEGUNDO PROGRAMA >>>>
Para el segundo programa creo que ya no te quedan muchas dudas pero de todos modos tratare de explicártelo.
La linea: array_ptr=&array[0]; hace que array_ptr apunte al primer elemento, o sea el elemento cero, del arreglo array.
Ahora la siguiente linea: valor=array_ptr[0]; asigna a la variable "valor" el contenido del primer elemento del arreglo array_ptr que es "1", por lo que la salida de tu programa siempre sera "1".
0 1 2 3 4 << posiciones de los elementos
-----------------------------
| 1 | 2 | 3 | 4 | 5 | << contenido
-----------------------------
^
^- "array_ptr" apunta a esta dirección
array_ptr[0] = 1
array_ptr[1] = 2
array_ptr[2] = 3
...
Espero haberte aclarado tus dudas, te sugiero que imprimas esta respuesta y la leas detenidamente hasta haber aclarado tus dudas. También te sugiero que busques más información en internet acerca del manejo de apuntadores en C, en sitios como: www.lafacu.com y www.lostutoriales.com entre otros, SUERTE en tu examen.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas