Está en la página 1de 8

DIRECCIONES EN MEMORIA

Cuando una variable se declara, se asocian tres atributos fundamentales con la misma: nombre, tipo
dirección en memoria.

Esta caja representa la posición de almacenamiento en memoria. El nombre de la variable está a


izquierda de la caja, la dirección de variable está encima de la caja el tipo de variable está debajo en
la caja. Si el valor de la variable se conoce, se representa en el interior de la caja

Al valor de una variable se accede por medio de nombre. Por ejemplo, se puede imprimir el valor
de con la sentencia:

A la dirección de la variable se accede por medio del operador de dirección Por ejemplo,
puede imprimir la dirección de con la sentencia:

operador de dirección (se aplica) sobre el nombre de la variable para obtener


direcciones. Tiene precedencia de nivel 15 con el mismo nivel que el operador lógico
operador de preincremento (Véase Capítulo

Obtener el valor la dirección de una variable.


325

Nota: es una dirección en código hexadecimal.


es el prefijo correspondiente código hexadecimal.

CONCEPTO DE PUNTERO (APUNTADOR)'


Cada vez que se declara una variable C, el compilador establece área de memoria para almacenar el
contenido de la variable. Cuando se declara una variable (entera), por ejemplo, el compilador asigna
dos bytes de memoria. El espacio para esa variable se sitúa en una posición específica de la memoria,
conocida como dirección de memoria. Cuando se referencia (se hace uso) al valor de la variable, el
compilador de C accede automáticamente a la dirección de memoria donde se almacena el entero. Se
puede ganar en eficacia en el acceso a esta dirección de memoria utilizando un puntero.
Cada variable que se declara en C tiene una dirección asociada con ella. Un puntero es una dirección
de memoria. El concepto de punteros tiene correspondencia en la vida diaria. Cuando se envía una carta
por correo, información se entrega basada en un puntero que es la dirección de esa carta. Cuando
telefonea a una persona, se utiliza un puntero (el número de teléfono se marca). pues, una
dirección de correos un número de teléfono tienen en común que ambos indican dónde encontrar algo.
Son punteros a edificios teléfonos, respectivamente. Un puntero en también indica dónde encontrar
algo, encontrar los datos que están asociados con una variable? Unpuntero es la dirección de
una Variable. punteros se rigen por estas reglas básicas:
un puntero es una variable como cualquier otra;
una variable puntero contiene una dirección que apunta a otra posición en memoria;
en esa posición se almacenan los datos a los que apunta el puntero;
un puntero apunta a una variable de memoria.

valor de un puntero es
una dirección. La dirección
depende del estado de
computadora en la cual se
ejecuta el

'A'

En Latinoamérica emplear el término


326

tipo de variable que almacena una dirección se denomina

75,

La variable se denomina debido a que su valor a la posición de otro valor.


puntero cuando el valor que apunta es de tipo como en el ejemplo anterior.

Al igual que cualquier variable, las variables punteros han de ser declaradas antes de utilizarlas.
declaración de una variable puntero debe indicar al compilador el de dato al que apunta el puntero;
para ello se hace preceder a su nombre con un asterisco mediante el siguiente formato:

Algunos ejemplos de variables punteros:

a
Un operador en una declaración indica que la variable declarada almacenará una dirección de
tipo de dato especificado. La variable almacenará la dirección de entero, la variable r2
almacenará la dirección de un dato tipo etc.

Siempre que aparezca un asterisco en una definición una variable, ésta es una variable
puntero.
Punteros

(iniciación) punteros

AI igual que otras variables, no inicializa punteros cuando se declaran es preciso inicializarlos
antes de su uso. La inicialización de puntero proporciona a ese puntero la dirección del dato
correspondiente. Después de la inicialización, se puede utilizar el puntero para referenciar datos
direccionados. Para asignar una dirección de memoria a puntero se utiliza el operador de referencia
por ejemplo,

significa dirección de valor». Por consiguiente, el método de inicialización (iniciación), también


denominado estático, requiere:
Asignar memoria (estáticamente) definiendo una variable a continuación hacer que el puntero
apunte al valor de la variable.

Asignar valor a la dirección de memoria.


50;
Cuando ya se ha definido puntero, el asterisco delante de la variable puntero indica contenido
de la memoria apuntada por el puntero será del tipo dado.
Este tipo de inicialización es estática, ya que la asignación de memoria utilizada para almacenar el
valor es fijo no puede desaparecer. Una vez que la variable se define, el compilador establece suficiente
memoria para almacenar valor del tipo de dato dado. La memoria permanece reservada para esta
variable no se puede utilizar para otra cosa durante la ejecución del programa. En otras palabras, no
se puede liberar la memoria reservada para una variable. El puntero a esa variable se puede cambiar,
pero permanecerá la cantidad de memoria reservada.

operador devuelve la dirección de la variable a la cual aplica,

Otros ejemplos de inicialización estáticos:

Es error asignar valor, a contenido de una variable puntero si previamente no se ha


inicializado con la dirección de una variable, bien se le ha asignado dinámicamente memoria. Por
ejemplo:

El diccionario de la Real Academia la Lengua Española acepta término el término empleo


de por extenso uso de dicho término en informática.
Existe segundo método para inicializar un puntero, es mediante asignación dinámica
memoria. Este método utiliza funciones de asignación de memoria
se analizará más adelante en el capítulo siguiente.

Indirección de punteros
Después de definir una variable puntero, el siguiente paso es inicializar el puntero utilizarlo para
direccionar algún dato específico en memoria. El uso de puntero para obtener el valor al que apunta,
es decir, su dato apuntado se denomina indireccionar puntero el puntero»); para ello,
se utiliza el operador de indirección *

dos sentencias anteriores se describen en la Figura 10.2. Si se desea imprimir el valor de edad,
se puede utilizar la siguiente sentencia:

También se puede imprimir el valor de edad dereferenciando el puntero edad:

en

en

Figura

El listado del siguiente programa muestra el concepto de creación, inicialización e indirección de


una variable puntero.

c;

(c c
ejecución de este programa visualiza el alfabeto. variable puntero es un puntero a una
variable carácter. La línea asigna a dirección de la variable El bucle
almacena en las letras del alfabeto la sentencia visualiza el contenido de la
variable apuntada por se refieren a la misma posición en memoria. Si variable que se
almacena en cualquier parte de memoria, que apunta a esa misma posición, se refiere a los
mismos datos, de modo que el cambio de una variable debe afectar a la otra; se dice que son
alias, debido a que actúa como otro nombre de

Valor de dirección
puntero

06

Figura

Tabla resume operadores de punteros.

Operador Propósito
Obtiene dirección de una variable.
* Define una variable como puntero.
Obtiene el contenido una variable puntero.

Son variables punteros aquellas que apuntan a la posición en donde de programa


se almacenan.

10.2.4. Punteros verificación de tipos

Los punteros se enlazan tipos de datos específicos, de modo que verificará si se asigna la dirección
de tipo de dato al tipo correcto de puntero. por ejemplo, si define un puntero no se
le puede asignar la dirección de un carácter un entero. Por ejemplo, este segmento de código no
funcionará:

C no permite la asignación de la dirección de a ya que f es una variable puntero que apunta


a datos de tipo real,

requiere que variables puntero realmente variables del mismo de dato que
está punteros en declaraciones.
10.5. PUNTEROS ARRAYS
arrays y punteros están fuertemente relacionados en el lenguaje Se pueden direccionar arrays
como fueran punteros punteros como si fueran arrays. La posibilidad de almacenar acceder
punteros arrays, implica que se pueden almacenar cadenas de datos en elementos de arrays. Sin
punteros eso no es posible, ya que no existe el tipo de dato cadena en existen
variables de cadena. Únicamente constantes de cadena.

10.5.1. Nombres de arrays como punteros


nombre de un array es simplemente un puntero. Supongamos que se tiene la siguiente declaración
de array:
20, 3 0 ,

Figura

Si se manda visualizar a se verá Pero, sucederá si se manda visualizar *


Como nombre de un array es un puntero, también se verá Esto significa que
Por consiguiente, para imprimir (visualizar), almacenar calcular un elemento de un array, se puede
utilizar notación de subíndices notación de punteros. Dado que un nombre de un array contiene la
dirección del primer elemento del array, se debe indireccionar el puntero para obtener el valor del
elemento.
El nombre de un array es un puntero, contiene la dirección en memoria de comienzo de la secuencia
de elementos que forma el array. Es puntero constante ya que no se puede modificar, se puede
acceder para indexar elementos del array. En el ejemplo se pone de manifiesto operaciones
correctas erróneas con nombres de array.

Ventajas de los punteros


Un nombre de un array es una constante no una variable puntero. se puede cambiar el valor
de un nombre de array, como no se pueden cambiar constantes. Esto explica por qué no se pueden
asignar valores nuevos a un array durante una ejecución de programa. Por ejemplo, si es
array de caracteres, la siguiente sentencia no es válida en C:

Se pueden asignar valores al nombre de un array sólo en el momento de la declaración, bien


utilizando funciones, tales como (ya se ha hecho anteriormente)
Se pueden cambiar punteros para hacerlos apuntar valores diferentes en memoria. El siguiente
programa muestra como cambiar punteros. El programa define dos valores de coma flotante. Un puntero
de coma flotante apunta a la primera variable se utiliza en El puntero se cambia
entonces, de modo que apunta a la segunda variable de coma flotante

Por esta facilidad para cambiar punteros, mayoría de los programadores de C utilizan punteros en
lugar de arrays. Como los arrays son fáciles de declarar, los programadores declaran arrays
continuación utilizan punteros para referencia elementos de dichos arrays.

También podría gustarte