La siguiente publicación es sobre el uso de apuntadores, la misma contiene tres (3) programas. Copie y ejecute el primer programa, posteriormente compare los programas 2 y 3. El nro. 2 se elaboró sin el uso de apuntadores. El nro. 3 es el mismo programa con el uso de apuntadores
/* Programa Nro 1 muestra el uso del ampersen & y el * con el
manejo de Punteros
Elaborado por Carlos Ferrer*/
#include<iostream>
using namespace std;
main()
{
int valor=14;
int *apuntador;
cout <<" *************** Manejo de memoria ******************* Pag 1 de 5"<<endl<<endl;
cout <<" El ampersand (&) es un operador de C++ y es comunmente"<<endl;
cout <<" utilizado. Este operador nos permite obtener la direccion"<<endl;
cout <<" de memoria de una variable cualquiera y es justo esto"<<endl;
cout <<" (la direccion en memoria) es lo que utilizan los programas"<<endl;
cout <<" para almacenar los datos o sea los valores asignados a las"<<endl;
cout <<" variables"<<endl<<endl;
cout <<" Veamos un ejemplo:"<<endl;
cout <<" Declaremos una variable entera y asignemosle el numero 14=>"<<endl<<endl;
cout <<" int valor=14"<<endl<<endl;
cout <<" Ahora procedamos a imprimir en pantalla la posicion de"<<endl;
cout <<" memoria, para esto usamos:"<<endl<<endl;
cout <<" cout<<&valor;"<<endl<<endl;
cout <<" El resultado es el siguiente:"<<endl<<endl;
cout<<" "<<&valor<<endl<<endl;
cout <<" En consecuencia en la posicion de memoria "<<&valor<<endl;
cout <<" es donde esta guardado el numero 14 "<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" *************** Apuntadores ******************* Pag 2 de 5"<<endl<<endl;
cout <<" El asterisco (*) es el operador por excelencia"<<endl;
cout <<" de los punteros. Su utilidad radica en que si"<<endl;
cout <<" el valor de dicho apuntador corresponde a una"<<endl;
cout <<" direccion de memoria, el asterisco nos permite"<<endl;
cout <<" acceder al valor almacenado alli."<<endl<<endl;
cout <<" Viendolo desde otro enfoque, un apuntador permite"<<endl;
cout <<" extraer el valor almacenado en una direccion de memoria."<<endl<<endl;
cout <<" IMPORTANTE: Los apuntadores deben ser del mismo tipo"<<endl;
cout <<" que el dato que se desea apuntar."<<endl<<endl;
cout <<" Veamos un ejemplo:"<<endl;
cout <<" Declaremos un apuntador del tipo entero=>"<<endl<<endl;
cout <<" int *apuntador"<<endl<<endl;
cout <<" Ahora hagamos que el apuntador contenga una"<<endl;
cout <<" posicion de memoria, para esto usaremos el & =>"<<endl<<endl;
cout <<" apuntador=&valor"<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" Si imprimimos la variable apuntador Pag 3 de 5"<<endl<<endl;
cout <<" cout <<apuntador;"<<endl<<endl;
cout <<" que dato esperas que aparezca en pantalla:"<<endl<<endl;
cout <<" a) La posicion de memoria que donde esta el numero 14 "<<endl;
cout <<" b) El numero 14 "<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" *************** RESPUESTA ******************* Pag 4 de 5"<<endl<<endl;
cout <<" Si imprimimos la variable apuntador"<<endl<<endl;
cout <<" cout <<apuntador;"<<endl<<endl;
cout <<" que dato esperas que aparezca en pantalla:"<<endl<<endl;
cout <<" Opcion A=>"<<endl<<endl;
apuntador=&valor;
cout <<" La posicion de memoria que donde esta el numero 14 "<<endl<<endl;
cout <<" "<<apuntador<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" Si queremos imprimir el valor de la posicion de memoria Pag 5 de 5"<<endl;
cout <<" corresponde usar el operador *"<<endl<<endl;
cout <<" para imprimir el dato de la posicion de memoria debemos"<<endl;
cout <<" cambiar => cout <<apuntador;"<<endl;
cout <<" por => cout <<*apuntador;"<<endl<<endl;
cout <<" El resultado sera = "<<*apuntador<<endl<<endl;
cout <<" EXITO!!!!"<<endl<<endl;
system ("pause");
}
--------------------------------------------------------------------
Programa Nro2
/*Este programa contabiliza la cantidad de letras A dentro de
una cadena de caracteres sin el uso de punteros*/
#include<iostream>
using namespace std;
string texto;
main()
{
int i;
int contador=0;
cout <<"ingrese la cadena de caracteres"<<endl;
getline(cin, texto);
for (i=0;i<=29;i=i+1)
{
if(texto[i]=='A' or texto[i]=='a')
{
contador=contador+1;
}
}
cout <<"Tu cadena de caracteres tiene la cantidad de "<<contador<< " letras A"<<endl;
system("pause");
}
-------------------------------------------------------------------
Programa Nro3
/*Este programa contabiliza la cantidad de letras A dentro de
una cadena de caracteres usando punteros*/
#include<iostream>
using namespace std;
string texto;
main()
{
int contador;
char *puntero;
cout <<"ingrese la cadena de caracteres (1 palabra)"<<endl;
getline(cin, texto);
puntero=&texto[0];
while(*puntero)
{
if(*puntero=='A' or *puntero=='a')
{
contador=contador+1;
}
puntero=puntero+1;
}
cout <<"Tu cadena de caracteres tiene la cantidad de "<<contador<< " letras A"<<endl;
system("pause");
}
-------------------------------------------------------------------
Programa Nro4
Otro ejemplo veamos un programa que le envía dos arreglos a una función y este le retorna el valor máximo y mínimo contenido en cada arreglo (usando punteros).
#include<iostream>
using namespace std;
void funcion_unica (double aux1[],double aux2[],int aux1_largo,int aux2_largo,double *a1_min,double *a1_max,double *a2_min,double *a2_max)
{
double aux1_max,aux1_min,aux2_max,aux2_min;
int i;
aux1_max=aux1[0];
aux2_max=aux2[0];
aux1_min=aux1[0];
aux2_min=aux2[0];
for (i=1;i<aux1_largo;i=i+1)
{
if(aux1[i]>aux1_max)
{
aux1_max=aux1[i];
}
if(aux1[i]<aux1_min)
{
aux1_min=aux1[i];
}
*a1_min=aux1_min;
*a1_max=aux1_max;
}
for (i=1;i<aux2_largo;i=i+1)
{
if(aux2[i]>aux2_max)
{
aux2_max=aux2[i];
}
if(aux2[i]<aux2_min)
{
aux2_min=aux2[i];
}
}
*a2_min=aux2_min;
*a2_max=aux2_max;
}
main()
{
double a1[]={12,13,14,15,1,2,1,6,7,8,9,0,12};
double a2[]={1,-23,3.2,4,5,6,7,8,9,12,12,1,0,34,23};
double min_a1,max_a1,min_a2,max_a2;
int largo_a1, largo_a2;
largo_a1=sizeof(a1)/sizeof(a1[0]);
largo_a2=sizeof(a2)/sizeof(a2[0]);
funcion_unica(a1,a2,largo_a1,largo_a2,&min_a1,&max_a1,&min_a2,&max_a2);
cout<<min_a1<<endl;
cout<<max_a1<<endl;
cout<<min_a2<<endl;
cout<<max_a2<<endl;
}