Sei sulla pagina 1di 13

ejemplo: Declaramos la variable 'a' y obtenemos su valor y direccin. #include <stdio.h> #include <conio.

h> int main() { int a; a = 10; printf( "Direccin de a = %p, valor de a = %i\n", &a, a ); getch(); }

Si ahora usramos el programa anterior: #include <stdio.h> #include <conio.h> int main() { int numero; numero = 43; printf( "Direccin de numero = %p, valor de numero = %i\n", &numero, numero ); getch(); } El resultado sera: Direccin de numero = 00003, valor de numero = 43

Vamos a volver sobre el ejemplo anterior un poco ampliado para ver cmo funciona un puntero: #include <stdio.h> #include <conio.h> int main() {int numero; int *punt; numero = 43; punt = &numero; printf( "Direccin de numero = %p, valor de numero = %i\n", &numero, numero ); getch();}

Para acceder a ellas se usa el operador *, que no hay que confundir con el de la multiplicacin. #include <stdio.h> #include <conio.h> int main() { int numero; int *punt; numero = 43; punt = &numero; printf( "Direccin de numero = %p, valor de numero = %i\n", &numero, *punt ); getch();} Si nos fijamos en lo que ha cambiado con respecto al ejemplo anterior, vemos que para acceder al valor de nmero usamos *punt en vez de numero.

Esto es as porque punt apunta a numero y *punt nos permite acceder al valor al que apunta punt. #include <stdio.h> #include <conio.h> int main() {int numero; int *punt; numero = 43; punt = &numero; *punt = 30; printf( "Direccin de numero = %p, valor de numero = %i\n", &numero, numero ); getch();}

Veamos el siguiente ejemplo. Queremos comprobar si dos variables son iguales usando punteros: #include <stdio.h> #include <conio.h> int main() {int a, b; int *punt1, *punt2; a = 5; b = 5; punt1 = &a; punt2 = &b; if ( punt1 == punt2 ) printf( "Son iguales\n" ); getch(); }

Para que el programa funcionara deberamos usar los asteriscos: #include<stdio.h> #include <conio.h> int main() {int a, b; int *punt1, *punt2; a = 5; b = 5; punt1 = &a; punt2 = &b; if ( *punt1 == *punt2 ) printf( "Son iguales\n" ); getch(); }

Vamos a cambiar un poco el ejemplo. Ahora 'b' no existe y punt1 y punt2 apuntan a 'a'. La condicin se cumplir porque apuntan al mismo sitio. #include <stdio.h> #include <conio.h> int main() { int a; int *punt1, *punt2; a = 5; punt1 = &a; punt2 = &a; if ( punt1 == punt2 ) printf( "punt1 y punt2 apuntan al mismo sitio\n" ); getch(); }

Hasta ahora para pasar una variable a una funcin hacamos lo siguiente: #include <stdio.h> #include <conio.h> int suma( int a, int b ) {return a+b;} int main() { int var1, var2, resultado; var1 = 5; var2 = 8; resultado = suma(var1, var2); printf( "La suma es : %i\n", resultado ); getch(); }

Bien aqu hemos pasado a la funcin los parmetros 'a' y 'b' (que no podemos modificar) y nos devuelve la suma de ambos. Supongamos ahora que queremos tener la suma pero adems queremos que var1 se haga cero dentro de la funcin. Para eso haramos lo siguiente: #include <stdio.h> #include <conio.h> int suma( int *a, int b ) { int c; c = *a + b; *a = 0; return c; } int main() { int var1, var2, resultado; var1 = 5; var2 = 8; resultado = suma(&var1, var2); printf( "La suma es: %i y a vale: %i\n", resultado , var1 ); getch(); }

Ejercicio 1: Encuentra un fallo muy grave: #include <stdio.h> #include <conio.h> int main() { int *a; *a = 5; getch(); } Solucin: No hemos dado ninguna direccin al puntero. No sabemos a dnde apunta. Puede apuntar a cualquier sitio, al darle un valor estamos escribiendo en un lugar desconocido de la memoria. Esto puede dar problemas e incluso bloquear el ordenador. Recordemos que al ejecutar un programa ste se copia en la memoria, al escribir en cualquier parte puede que estemos cambiando el programa (en la memoria, no en el disco duro).

Ejercicio 2: Escribe un programa que de un valor a una variable. Esta sea apuntada por un puntero y sumarle 3 a travs del puntero. Luego imprimir el resultado. Solucin: Esta es una posible solucin: #include <stdio.h> #include <conio.h> int main() { int a; int *b; a = 5; b = &a; *b += 3; printf( "El valor de a es = %i\n", a ); getch(); } Tambin se poda haber hecho: printf( "El valor de a es = %i\n", *b );

Potrebbero piacerti anche