Unidad 6

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

Apuntadores

6.1 Representación de un apuntador


Apuntadores.
Los apuntadores son uno de los mitos del lenguaje de programación C (otro es la
recursividad aunque ésta no está asociada con ningún lenguaje sino con la
programación). Esta entrada introduce a los conceptos y manipulación de apuntadores;
la principal intención es que los apuntadores dejen de ser un mito y pasen a ser parte del
repertorio de herramientas fundamentales del programador, ya que los apuntadores son,
en más de un sentido, la piedra angular del lenguaje de programación C.
Definición, estructura y representación. La sencillez de los apuntadores se basa en su
definición la cual es bastante fácil de recordar y es, en esencia, casi todo lo que se tiene
que saber respecto a los apuntadores y de ahí la importancia de su comprensión.
Un apuntador almacena direcciones de memoria. Básicamente hay dos tipos de
apuntadores:Apuntadores a variables.Apuntadores a funciones.
Si el apuntador es a una variable, entonces el apuntador almacena la dirección en
memoria de dicha variable. Si el apuntador es a una función, entonces el apuntador
almacena la dirección en memoria del inicio del código de dicha función. Por ser en
principio más simples, se presentarán primero los apuntadores a variables.
Las siguientes figuras muestran la representación de un apuntador, y su explicación se
verá reforzada cuando se analice el Ejemplo 7.1. Mientras tanto, tome en cuenta que un
apuntador sólo puede hacer referencia o apuntar a objetos de su mismo tipo de datos,
esto es: un apuntador a int, sólo puede hacer referencia a variables de tipo int, un
apuntador a char, sólo puede hacer referencia a variables de tipo char, etc.

6.2 Precedencia de operadores de Apuntadores


La precedencia de un operador indica qué tan “estrechamente” se unen dos expresiones
juntas. Por ejemplo, en la expresión 1 + 5 * 3 , la respuesta es 16 y no 18 porque el
operador de multiplicación (“*”) tiene una precedencia mayor que el operador de
adición (“+”). Los paréntesis pueden ser usados para forzar la precedencia, si es
necesario. Por ejemplo: (1 + 5) * 3 se evalúa como 18.
Cuando los operadores tienen igual precedencia su asociatividad decide cómo se
agrupan. Por ejemplo “-“ tiene asociatividad a izquierda, así 1 – 2 – 3 se agrupa como (1
– 2) – 3 y se evalúa a -4. “=”, por otra parte, tiene asociatividad a derecha, así $a = $b =
$c se agrupa como $a = ($b = $c).
Los operadores de igual precedencia que no son asociativos no pueden usarse unos
junto a otros, por ejemplo, 1 < 2 > 1 es ilegal en PHP. La expresión 1 <= 1 == 1, por
otro lado, es legal, ya que el operador == tiene menos precedencia que el operador <=.
El uso de paréntesis, incluso cuando no es estrictamente necesario, a menudo puede
aumentar la legibilidad del código haciendo grupos explícitamente en lugar de confiar
en la precedencia y asociatividad implícitas del operador.
BuLa siguiente tabla enumera los operadores en orden de precedencia, con los de más
alta precedencia al inicio. Los operadores en la misma línea tienen igual precedencia, en
cuyo caso la asociatividad decide el agrupamiento.
La precedencia y asociatividad de los operadores solamente determinan cómo se
agrupan las expresiones, no especifican un orden de evaluación. PHP no especifica (en
general) el orden en que se evalúa una expresión y se debería evitar el código que se
asume un orden específico de evaluación, ya que el comportamiento puede cambiar
entre versiones de PHP o dependiendo de código circundante.

6.3 Llamadas por referencia


La llamada por método de referencia copia la dirección de un argumento en el
parámetro formal. En este método, la dirección se utiliza para acceder al argumento real
utilizado en la llamada a la función. Significa que los cambios realizados en el
parámetro alteran el argumento que se pasa.
En este método, la asignación de memoria es la misma que los parámetros reales. Todos
operaLas modificaciones en la función se realizan sobre el valor almacenado en la
dirección del parámetro real, y el valor modificado se almacenará en la misma
dirección.
En el método Llamada por valor, el valor original no se modifica, mientras que en el
método Llamada por referencia, se modifica el valor original.
En Llamada por valor, se pasa una copia de la variable, mientras que en Llamada por
referencia, se pasa una variable en sí.
En Llamada por valor, los argumentos reales y formales se crearán en diferentes
ubicaciones de memoria, mientras que en Llamada por referencia, los argumentos reales
y formales se crearán en la misma ubicación de memoria.
La llamada por valor es el método predeterminado en lenguajes de programación como
C++, PHP, Visual Basic NET y C#, mientras que la llamada por referencia solo se
admite en el lenguaje Java.
Las variables de llamada por valor se pasan mediante un método sencillo, mientras que
se requieren punteros de llamada por referencia para almacenar la dirección de las
variables.

6.4
En términos generales, podemos referirnos como apuntador, puntero o pointer a una
variable que almacene una dirección de memoria; tan sencillo como eso. El apuntador
nos permitirá guardar la dirección de memoria donde se localiza alguna otra variable o
constante.Normalmente solo necesitamos el nombre de la variable para poder acceder a
su valor; siendo así, ¿para qué molestarnos en conocer la dirección de dónde se
encuentra? Ya lo iremos viendo durante la serie.
No es nada difícil declarar un apuntador, prácticamente es la misma sintaxis que cuando
declaramos una variable cualquiera, la única diferencia es que debemos agregar un
símbolo extra. El símbolo utilizado para esto es el asterisco (*).
Aunque es verdad que la dirección de memoria es solo un número, esto no quiere decir
que el apuntador sea de algún tipo de dato; entonces ¿por qué tengo que colocar un tipo
de dato al momento de declararlo?
A diferencia de lo que ocurre con una variable común y corriente, donde el tipo de dato
es necesario para saber cuanto espacio deberá reservarse en memoria, en los
apuntadores ocurre otra cosa: se coloca el tipo de dato para determinar el tamaño del
segmento al que el apuntador hará referencia. Por ejemplo, si estamos almacenando la
dirección de una variable de tipo entero, debemos declarar un apuntador que incluya el
tipo int.
Hemos hablado suficiente de direcciones de memoria y de cómo estas son los valores
que almacenan los apuntadores, siendo así, ¿cómo es que obtengo la dirección de alguna
variable para poderla guardar en un apuntador?
Así como existe un operador para declarar apuntadores, existe también uno para poder
obtener la dirección de una variable, este operador es el símbolo ampersand (&). Lo
único que debes hacer es colocar este operador inmediatamente a la izquierda del
identificador de la variable cuya dirección quieres saber.

También podría gustarte