APUNTADORES REEMPLAZANDO A VARIABLES


Como ejemplo de acceso al contenido de las variables empleando apuntadores, considere el programa en el que se emplean 4 variables reales y 1 entera para realizar operaciones con los correspondientes apuntadores, en lugar de las variables mismas:
 

#include<conio.h>

#include<stdio.h>

#include<math.h>

main()

{

float a,b,c,dis; /* declaración de las variables reales */

float *aa,*ab,*ac,*adis; /* declaración de sus apuntadores */

int sig; /* declaración de variable entera */

int *asig; /* declaración de su apuntador */

clrscr();

printf(" dame los coeficientes de a,b,c, donde a no sea cero ");

scanf("%f,%f,%f"&a,&b,&c);

dis=pow(b,2)-4.0*a*c;

adis=&dis; /* se asigna la dirección del resultado al apuntador */

asig=&sig;

if(*adis<0)sig=-1; /* el operador indirección refiere el contenido */

if(dis==0)sig=0;

if(*adis>0)sig=1; /* usa contenido a través de su apuntador */

switch(*asig) /* se conmuta mediante apuntador */

{
 
 

case -1:
 
 

printf("\n raíces complejas ");

printf(" x1r=%f x1i=%f",-b/(2.0*a),-sqrt(-dis)/(2*a));

printf(" x2r=%f x2i=%f",-b/(2.0*a),sqrt(-dis)/(2*a));

break;
 
 

case 0:

printf("\n raices repetidas ");

printf("x1=%f",-b/(2*a));

printf("x2=%f",-b/(2*a));

break;
 
 

case 1:

printf(\n raíces reales ");

printf("x1=%f",(-b+sqrt(dis))/(2*a);

printf("x2=%f",(-b-sqrt(dis))/(2*a);

break;

}

}

Como otro ejemplo de manipulación de información mediante apuntadores, considere el ejemplo siguiente:
 

#include<conio.h>

#include<stdio.h>

main()

{

float f1,f2;

int v11,v22;

float v33;

int v1=1, v2=2; /* se declaran variables y sus valores iniciales */

float v3=1.2;

int *apunt1,*apunt2; /* declara apuntadores para variables enteras */

float *apunt3; /* declara un apuntador para una variable real */

/* se asignan direcciones para los apuntadores */

apunt1=&v1;

apunt2=&v2;

apunt3=&v3;

/* se asignan valores a través de apuntadores */

v11=*apunt1;

v22=*apunt2;

v33=*apunt3;

/* de esa forma las expresiones siguientes son equivalentes */

/* pues se MENCIONAN valores a través de direcciones */

f1=(*apunt1+*apunt2+*apunt3)/3.2;

f2=(v11+v22+v33)/3.2;

printf("\n f1= %f \t\t f2= %f",f1,f2);

printf("\n observe que los resultados son los mismos");

printf("\n para continuar oprime una tecla "); getch();

/* de esa forma también es posible asignar valores a través de los apuntadores, es decir a través de las direcciones */

*apunt1=10;

*apunt2=20;

*apunt3=30;

f1=(*apunt1+*apunt2+*apunt3)/3.2;

f2=(v11+v22+v33)/3.2;

printf("\n f1= %f \t\t f2= %f",f1,f2;

printf("\n\n Observe nuevamente que los resultados son los mismos ");

printf("presiona una tecla para terminar "); getch();

}


Selecciona un tema