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;

NUNCA se cargó como último caracter el '\0' para que sea considerado un string. Veamo como forzar eso:

#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: "<