Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Apuntadores en C y C++

Enviado por   •  16 de Diciembre de 2018  •  2.325 Palabras (10 Páginas)  •  244 Visitas

Página 1 de 10

...

C´odigo C y C++

float *p;

cout

*p = 3.5; // Incorrecto

2. Despu´es de que un apuntador ha sido inicializado, la direcci´on que posee puede dejar de ser v´alida si

se libera la memoria reservada en esa direcci´on, ya sea porque la variable asociada termina su ´ambito

o porque ese espacio de memoria fue reservado din´amicamente y luego se liber´o . Ejemplo:1

1La asignaci´on din´amica de memoria se explica en la secci´on 13

3

---------------------------------------------------------------

C´odigo C y C++

int *p, y;

void func()

{

int x = 40;

p = &x;

y = *p; // Correcto

*p = 23; // Correcto

}

void main()

{

func();

y = *p; // Incorrecto

*p = 25; // Incorrecto

}

Si se intenta desreferenciar un apuntador que contiene una direcci´on inv´alida pueden ocurrir cosas como

las siguientes:

Se obtiene un valor incorrecto en una o m´as variables debido a que no fue debidamente inicializada

la zona de memoria que se accede a trav´es de la direcci´on en cuesti´on. Esto puede ocasionar que el

programa genere resultados incorrectos.

Si casualmente la direcci´on es la misma de otra variable utilizada en el programa, o est´a dentro del

rango de direcciones de una zona de memoria utilizada, existe el riesgo de sobreescribir datos de otras

variables.

Existe la posibilidad de que la direcci´on est´e fuera de la zona de memoria utilizada para almacenar

datos y m´as bien est´e, por ejemplo, en la zona donde se almacenan las instrucciones del programa. Al

intentar escribir en dicha zona, f´acilmente puede ocurrir que el programa genere un error de ejecuci´on

y el sistema operativo lo detenga, o que el programa no responda y deje al sistema operativo inestable.

En muchos casos el sistema operativo detecta el acceso inadecuado a una direcci´on de memoria, en cuyo

caso detiene abruptamente el programa.

Cuando no se desea que un apuntador apunte a algo, se le suele asignar el valor NULL, en cuyo caso se

dice que el apuntador es nulo (no apunta a nada). NULL es una macro t´ıpicamente definida en archivos de

cabecera como stdef.h y stdlib.h. Normalmente, en C++ se encuentra disponible sin incluir ning´un archivo

de cabecera. NULL se suele definir en estas librer´ıas as´ı:

C´odigo C y C++

#define NULL 0

Un apuntador nulo se utiliza para proporcionar a un programa un medio de conocer cu´ando un apuntador

contiene una direcci´on v´alida. Se suele utilizar un test condicional para saber si un apuntador es nulo o no

lo es, y tomar las medidas necesarias. El valor NULL es muy util para la construcci´´ on de estructuras de

datos din´amicas, como las listas enlazadas, matrices esparcidas, etc. Es igualmente incorrecto desreferenciar

el valor NULL por las mismas razones presentadas previamente.

9. Apuntadores a apuntadores

Dado que un apuntador es una variable que apunta a otra, f´acilmente se puede deducir que pueden existir

apuntadores a apuntadores, y a su vez los segundos pueden apuntar a apuntadores, y as´ı sucesivamente. Estos

4

---------------------------------------------------------------

apuntadores se declaran colocando tantos asteriscos (‘*’) como sea necesario. Ejemplo:

C´odigo C y C++

char c = ’z’;

char *pc = &c;

char **ppc = &pc;

char ***pppc = &ppc;

***pppc = ’m’; // Cambia el valor de c a ’m’

10. Apuntadores constantes y apuntadores a constantes

Es posible declarar apuntadores constantes. De esta manera, no se permite la modificaci´on de la direcci´on

almacenada en el apuntador, pero s´ı se permite la modificaci´on del valor al que apunta. Ejemplo:

C´odigo C y C++

int x = 5, y = 7;

int *const p = &x; // Declaraci´on e inicializaci´on del apuntador constante

*p = 3; // Esto es v´alido

p = &y; // Esto no es v´alido (el compilador genera un error)

Tambi´en es posible declarar apuntadores a datos constantes. Esto

...

Descargar como  txt (16.4 Kb)   pdf (71.4 Kb)   docx (26.1 Kb)  
Leer 9 páginas más »
Disponible sólo en Essays.club