ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Punteros(PROGRAMACION)


Enviado por   •  1 de Agosto de 2013  •  1.576 Palabras (7 Páginas)  •  385 Visitas

Página 1 de 7

PUNTEROS

2

 Punteros en C  Un puntero es una variable que almacena direcciones de memoria

tipo *puntero; tipo variable; puntero = &variable;

A partir de la última sentencia puntero y variable permiten modificar el valor almacenado en la dirección de memoria ffd0

 Un puntero está asociado a un tipo y contiene como valor una dirección

variable

puntero

ffd0

fff0 ffd0

valor

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

3

 Punteros en C  Como un puntero posee una dirección de memoria esta puede ser asignada a un puntero también tipo **puntero2; puntero2 = &puntero;

 Operaciones - Asignarle un valor puntero=direccion puntero=(cast)puntero

el operador & (operador de dirección) retorna la dirección de una variable puntero=&variable

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

4

 Operador de desreferencia (*)  Es posible modificar el valor de la variable que “apunta” el puntero

int a=10; int *ptra; ptra = &a; *ptra=50;

printf(“%d”, a);     ­­­­>  50 a=100; printf(“%d”, *ptra); ­­­­> 100

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

5

 Pasaje de argumentos por valor y referencia  En C, por defecto, los parámetros a una función se pasan por valor  Las variables pasadas a una función no son modificadas, en la función se crean variables automáticas con los valores de las variables empleadas en la invocación  Las variables automáticas se destruyen al retornar la función

Pasaje por valor     int suma_dobles(int a, int b) { //a posee una copia del valor de x, b de y, vars. automáticas        a = a*2; // variable local a cambia de valor        b = b*2;        // variable local b cambia de valor        return a+b;      }        int main() {        int x=10, y=20;        printf(“Variables x=%d y=%d\n”, x, y);  // variables x=10 y=20        suma_dobles(x, y);        printf(“Variables x=%d y=%d\n”, x, y);  // variables x=10 y=20     // x e y no cambian luego de invocar a suma_dobles          return 0;      }

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

6

 Pasaje de argumentos por valor y referencia  Si se emplean direcciones en la invocación a una función, las variables automáticas reciben direcciones (referencias), no valores  Toda modificación dentro de la función que altere los valores almacenados en dichas direcciones serán visibles al retornar dicha función Pasaje por referencia     int suma_dobles(int *a, int *b) { //a y b son punteros, reciben direcciones        *a = (*a)*2; // cambia de valor el lugar de memoria de a        *b = (*b)*2;       // cambia de valor el lugar de memoria de b        return (*a)+(*b);      }        int main() {        int x=10, y=20;        printf(“Variables x=%d y=%d\n”, x, y); // variables x=10 y=20        suma_dobles(&x, &y);           // se pasan direcciones        printf(“Variables x=%d y=%d\n”, x, y); // variables x=20 y=40     //x e y cambiaron luego de invocar a suma_dobles          return 0;      }

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

7

 Aritmética de punteros  Los punteros pueden oficiar de operandos para algunos operadores aritméticos

 Es posible sumar o restar una constante numérica a un puntero  tipo a=valor;  tipo *ptra=&a;  tipo *ptrb=NULL;  ptrb=ptra+Constante; //esto es en realidad ptra+Constante*sizeof(tipo);

También valen  ptra = ptra + Constante      ptra += Constante (+=)    ptra++    (++) Mismas operaciones con (-)

En el contexto de un array o un espacio de memoria dinámicamente obtenido la resta de punteros retorna la cantidad de elementos de tamaño del tipo asociado entre las direcciones que apuntan sendos punteros. Ejemplo.

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

8

 Puntero NULL  NULL es una constante simbólica que representa un valor especial de dirección de memoria, un valor nulo

 NULL está definido en <stdio.h>

 Un “puntero NULL” es un puntero con este valor  NULL es útil para protegerse del acceso no controlado a memoria int a=10; int *ptra;    //Inicializado “apuntando” a alguna dirección *ptra = 5000; //Error: modificación de una dirección de memoria desconocida

Forma correcta int a=10; int *ptra=NULL;  Intentar modificar el valor de lo que “apunta” ptra es un error

 Es un error desreferenciar un “puntero NULL” Se puede comprobar antes si un puntuero es NULL mediante ptra == NULL ptra != NULL

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

9

 Puntero void  Es posible asignar directamente un puntero a otro si ambos poseen el mismo tipo

 Si los tipos son diferentes debe realizarse una conversión explícita de tipos mediante cast. Sintaxis: (tipo)puntero

 El puntero void es un “puntero genérico” capaz de representar cualquier tipo de puntero Todos los tipos de puntero pueden asignarse a un puntero void sin cast, pero un puntero void solo puede asignarse a otro de otro tipo si se emplea cast

 Se recibe un error si se desreferencia un puntero void

void *ptrv; int i=5; ptrv=ptri; //OK double d=10.7; ptrv=ptrd; //OK int *ptri=&i; ptrd=ptrv; //Error double *ptrd=&d; ptrd=(double*)ptrv; //OK

Analista Universitario en Sistemas Taller de Programación II

Instituto Politécnico Superior

10

 Punteros a string (cadena)  En C no existe el tipo string ni se cuenta con operadores para su tratamiento, como un operador de contatenación de cadenas, por ejemplo.

...

Descargar como (para miembros actualizados) txt (12 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com