Punteros
Condições de conclusão
7. Inicializando Punteros
El puntero y la variable a la que apunta DEBEN ser compatibles.
Un puntero almacena una DIRECCIÓN , no un tipo de dato int. float, bool, etc.
Un puntero almacena una DIRECCION que apunta a un tipo de dato int. float, bool, etc.
Para obtener la dirección de una variable se usa el operador : &
Este operador "OBTIENE" la dirección de la variable y permite INICIALIZAR el puntero.
Ejemplo:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int b; // variable sin inicializar
int *puntero; // puntero sin inicializar<
puntero=&b; //ahora el puntero está inicializarlo
//a partir de la línea anterior el puntero apunta a variable b
b=3;
cout<<*puntero<<endl; //muestro elvalor de la varaible usando el puntero
cout<<puntero<<endl;//muestro el contenido del puntero: dirección.
return 0;
}
El nombre de un Arreglo es un puntero!!
Veamos un ejemplo:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
float vector[5],*p;
p=vector;//puntero=nombre del arreglo!! equivalente a p=&vector[0];
for(int i=0;i<5;i++)cin>>*(p+i);
for(int i=0;i<5;i++)cout<<*(p+i)<<"\t"<<(p+i)<<endl;
return 0;}
Vemos que en la línea 6 se iguala el nombre del arreglo a un puntero..esto indica que C++ toma el nombre del arreglo como un puntero.!si podría hacer p++ , pero NO puedo hace vector++!!
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int *p; //Declaro puntero a un entero
float *x; //Declaro puntero a un real
char *text; //Declaro puntero a un char
p=new int[4];// reserva 4 espacios para enteros de manera contigua.
x=new float[4];// reserva 4 espacios para reales de manera contigua.
text=new char[11];// reserva 11 espacios para caracteres de manera contigua.
for(int i=0;i<4;i++)
{
cout<<"Ingrese un entero: "<<endl;
cin>>*(p+i);
}
cout<<endl;
cout<<"Ud. ingreso: "<<endl;
for(int i=0;i<4;i++)cout<<*(p+i)<<" ";
cout<<endl;
for(int i=0;i<4;i++)
{
cout<<"Ingrese un real: "<<endl;
cin>>*(x+i);
}
cout<<"Ud. ingreso: "<<endl;
for(int i=0;i<4;i++)cout<<*(x+i)<<" ";
cout<<endl;
for(int i=0;i<10;i++)// de 0 a 9 hay 10 caracteres.
{
cout<<"Ingrese un caracter: "<<endl;
cin>>*(text+i);
}
cout<<"Ud. ingreso: "<<endl;
cout<<text; // ver que aqui NO hay for!!
delete[] x;
delete[] p ;
delete[] text;
return 0;
}
Notar que :
cout<<text;
#include
using namespace std;
int main(int argc, char *argv[])
{
char *text; //Declaro puntero a un char
text=new char[5];// reserva 6 espacios para caracteres de manera contigua.
//antes de inicializar el arreglo..
for(int i=0;i<5;i++) //de 0 a 4 hay 5 Caracteres!!
//ver que NO cargo la posición 5 con NULL,entonces por que es un srting?
{
cout<<"Ingrese un caracter: "<<*(text+i);
}
*(text+4)='\0';//aqui estoy forzando a que sea un string
//cargando en la ultima posición un caracter NULL.
cout<<"Ud. ingreso: "<