jueves, 9 de diciembre de 2010

APUNTADORES

APUNTADORES

Los apuntadores son una parte fundamental de C. Si usted no puede usar los apuntadores apropiadamente entonces esta perdiendo la potencia y la flexibilidad que C ofrece básicamente. El secreto para C esta en el uso de apuntadores.
C usa los apuntadores en forma extensiva. ¿Porqué?
·    Es la única forma de expresar algunos cálculos.
·    Se genera código compacto y eficiente.
·    Es una herramienta muy poderosa.
C usa apuntadores explícitamente con:
·    Es la única forma de expresar algunos cálculos.
·    Se genera código compacto y eficiente.
·    Es una herramienta muy poderosa.
C usa apuntadores explícitamente con:
·    Arreglos,
·    Estructuras y
·    Funciones
Un apuntador es una variable que contiene la dirección en memoria de otra variable. Se pueden tener apuntadores a cualquier tipo de variable.
El operador unario o monádico & devuelve la dirección de memoria de una variable.
El operador de indirección o dereferencia * devuelve el ``contenido de un objeto apuntado por un apuntador''.
Para declarar un apuntador para una variable entera hacer:
int *apuntador;
Se debe asociar a cada apuntador un tipo particular. Por ejemplo, no se puede asignar la dirección de un short int a un long int.
Para tener una mejor idea, considerar el siguiente código:
main()
{
    int x = 1, y = 2;
    int *ap;

    ap = &x;

    y = *ap;

    x = ap;

    *ap = 3;
}

EJEMPLO

#include<stdio.h>
#include<conio.h>
void main()
{
int *punt=NULL, var=14;
printf("%#x, %#x", punt, &var);
printf("\n%d, %d", *punt, var);
punt=&var;
printf("%#x, %#x", punt, &var);
printf("\n%d, %d", *punt, var);
printf("%d,%d", *(punt+1), var+1);
getch();
}

ASIGNACION FIJA Y DINAMICA: EJMPLOS DE PROGRAMAS

ASIGNACION FIJA
#include<iostream.h>
#include<conio.h>

struct alumno{
char nombre[20];
double matri;
int cal1,cal2,cal3;
void datos()
{
cout<<endl;
cout<<endl;
cout<<"Nombre"<<endl;
cin>>nombre;
cout<<"Matricula"<<endl;
cin>>matri;
cout<<"Calificacion 1"<<endl;
cin>>cal1;
cout<<"Calificacion 2"<<endl;
cin>>cal2;
cout<<"Calificacion 3"<<endl;
cin>>cal3;
}

void resultado()
{
cout<<endl;
cout<<"\tDatos"<<endl;
cout<<endl;
cout<<"Alumno"<<"\tMatricula"<<"\tCalificacion 1"<<"\tCalificacion 2"<<"\tcalificacion 3"<<endl;
cout<<endl;
cout<<nombre<<"\t"<<matri<<"\t\t"<<cal1<<"\t\t"<<cal2<<"\t\t"<<cal3<<endl;
cout<<endl;
}
}esc[3];
int main()
{
//clrscr();

for(int i=0;i<3;i++)
{
esc[i].datos();
esc[i].resultado();
}
getch();
return 0;
}

ASIGNACION DINAMICA

#include<iostream.h>
#include<conio.h>
int main(void)
{
 int *vector, tm;
 int indice;
 cout<<"Ingrese el numero de elemnetos:";
 cin>>tm;
 vector = new int(tm); //Asignacion dinamica de memoria.
 for(indice=0;indice<tm;indice++)
 {
  cout<<"Introduzca vector["<<indice + 1<< "]: ";
  cin>>vector[indice];
 }
 for(int i=0;i<tm;i++)
 {

 cout<<"El vector es"<<vector[i]<<endl;
 }
getch();
}