Está en la página 1de 12

Variables RAM Nombre asignado

Direcciones o Contenido a cada uno de los


posiciones de espacios de
Variable_x Dato memoria de cada 126 memoria (nombres
uno de los espacios 127 de las variables)
Variable_x = Dato de memoria o
128 624 Var6
variables
129 758 Var5
Dato 130 394 Var4
131 193 Var3
Variable_x Dato
132 974 Var2
Num_x
133 523 Var1
En este ejemplo, la caja tiene asignado el 134
nombre Variable_x, esta caja representa el
espacio de memoria que estaría utilizando la
135
variable llamada Variable_x. En ese espacio
En este ejemplo, los números 624, 758, etc. son los datos almacenados
se asigna o guarda el valor indicado como
en las direcciones 128, 129, etc. respectivamente (hemos supuesto que
Dato. Además, dicho espacio de memoria
las direcciones de memoria toman valores enteros consecutivos, más
tiene una ubicación en la memoria, que es
adelante veremos en detalle los valores que realmente toma cada
un número indicado como Num_x. Es decir
dirección de memoria). Cada uno de esos espacios de memoria, es una
que Num_x es la posición de Variable_x.
variable que tiene asignado un nombre Var1, Var2, etc. 1
PROGRAMACIÓN I - FACET - UNT
Variables
#include <stdio.h>
int main( ){
int Entero1, Entero2, Entero3;/*Se reservan los espacios
de memoria para las 3 variables*/
return 0;
}

El tipo de dato int lo utilizamos de molde para crear a las variables Entero1, Entero2 y Entero3

Entero3
int
Entero2
Entero1 2
PROGRAMACIÓN I - FACET - UNT
Variables
#include <stdio.h> Las posiciones o direcciones de memoria se las
int main( ){ representa en notación hexadecimal, dado que la
int Entero1, Entero2, Entero3; cantidad de dígitos utilizados para representar un
return 0; número en hexadecimal es menor a la cantidad
} utilizada en otras bases. Además es la forma más
simple de conocer su equivalente en binario.
Dado que el tipo de dato int ocupa 4 bytes, la
distancia que existe entre dos posiciones de 0x
Se utiliza el prefijo (cerox) para indicar que el
memoria contiguas, correspondientes a las dos número está expresado en base hexadecimal.
variables declaradas de tipo int, también es 4. El
incremento en la dirección depende del tamaño del
tipo de dato.

0x62FE14
Entero3
int 0x62FE18
Entero2
0x62FE1C
Direcciones o posiciones de
memoria de cada uno de los Entero1 3
espacios de memoria o variables

PROGRAMACIÓN I - FACET - UNT


Variables
Una variable tiene un nombre que la identifica,
#include <stdio.h> recordemos que una variable ocupa un espacio de
int main( ){ memoria, ese espacio de memoria tiene una
int Entero1, Entero2, Entero3; posición o dirección de memoria, que permite
Entero1 = 315; ubicar a dicha variable.
Entero2 = 196; Las variables se utilizan para guardar o almacenar
Entero3 = 420; algún dato. En este ejemplo se declaran 3 variables
tipo int, cada variable contiene un número
return 0;
entero.
}
Nombre de cada variable

Entonces una variable tiene:


1) un nombre, 0x62FE14
420 Contenido de cada
Entero3 variable
2) una posición o dirección
de memoria y 0x62FE18
196
3) un dato almacenado. Entero2
0x62FE1C
315
Direcciones o posiciones de
memoria de cada uno de los
Entero1 4
espacios de memoria o variables

PROGRAMACIÓN I - FACET - UNT


Punteros
Un puntero es una variable que se utiliza para guardar o almacenar la posición o dirección
de memoria de otra variable.
En este ejemplo la variable Puntero1 contiene la dirección de memoria de la variable Entero1, entonces se dice que
la variable Puntero1 apunta a la variable Entero1. De igual manera sucede con las variables Puntero2 y Puntero3,
respectivamente. El concepto de puntero es independiente del tipo de dato de la variable; en este ejemplo se utilizó
por simplicidad variables tipo entero, pero se podría haber utilizado tipo float, char, etc.

0x62FE14 0x62FE14
420
Puntero3 Entero3
0x62FE18 0x62FE18
196
Variables
puntero
Puntero2 Entero2
0x62FE1C 0x62FE1C 315
Puntero1 Entero1 5
PROGRAMACIÓN I - FACET - UNT
Punteros
Mediante el uso de un puntero, es posible acceder a un espacio de memoria para:
● Usar el dato (o valor) almacenado es ese espacio
● O almacenar (o cambiar) un dato (o valor) en ese espacio.
Siendo el valor de la variable puntero igual a la ubicación (o dirección de memoria) de dicho espacio de memoria.

Es decir que se puede utilizar un puntero, que previamente esté apuntando a una variable, para:
● Acceder en forma indirecta a la variable y usar el dato (o valor) contenido en dicha variable
● O también para acceder en forma indirecta a la variable y almacenar o cambiar un dato (o valor) en dicha variable.

Operadores específicos para punteros:


Principalmente existen dos operadores que se utilizan con punteros, estos son el & (ampersand) y el * (asterisco).

● El símbolo &, llamado operador dirección o referencia, se utiliza para obtener la dirección de memoria de una
variable.

● El símbolo *, se lo puede utilizar con dos finalidades distintas:


● Para indicar que se está declarando una variable tipo puntero
● Como operador indirección o desreferencia, es decir para poder acceder a la variable apuntada por un puntero.
6
PROGRAMACIÓN I - FACET - UNT
Punteros

&
#include <stdio.h>
int main( ){
int Entero1, Entero2, Entero3;
return 0;
}

&Entero1 es igual a 0x62FE1C 0x62FE14


Entero3
&Entero2 es igual a 0x62FE18 0x62FE18
Entero2
&Entero3 es igual a 0x62FE14 0x62FE1C
Entero1 7
PROGRAMACIÓN I - FACET - UNT
Declaración de punteros
2) Para declarar una variable tipo puntero:

}
*
a) Se debe anteponer al nombre de la variable un (asterisco), esto indica que esa variable será un puntero.

#include <stdio.h> /*Declaración de punteros*/


int main( ){
*
b) Se debe indicar el tipo de dato de la variable a la que apuntará dicho puntero.

int *puntero1, *puntero2, *puntero3;/*Declaración de 3 variables tipo puntero, que están


disponibles para apuntar a cualquier variable que sea de tipo entero*/

return 0;

En el ejemplo anterior solamente se declararon 3 variables tipo puntero, quedando preparadas para apuntar a
cualquier variable que sea de tipo entero. También se podría declarar de igual manera punteros a float, char, etc.
Importante: Cuando utilicemos punteros, siempre debe coincidir el tipo de dato de la variable a la que apuntará,
con el tipo de dato de la variable apuntada.

PROGRAMACIÓN I - FACET - UNT


8
Punteros
#include <stdio.h>
int main( ){
int *puntero1, *puntero2, *puntero3;/*Declaración de variables puntero, que se usarán
para apuntar a variables tipo entero*/
int Entero1, Entero2, Entero3; /*Declaración de variables tipo entero*/
puntero1 = &Entero1; /* puntero1 ahora apunta a la variable Entero1 */
puntero2 = &Entero2; /* puntero2 ahora apunta a la variable Entero2 */
puntero3 = &Entero3; /* puntero3 ahora apunta a la variable Entero3 */
/*El operador & utilizado a la izquierda de la variable Entero1, se utiliza para
obtener la dirección de memoria de dicha variable. Por lo tanto, se asigna la dirección
de memoria de la variable Entero1 a la variable puntero1. De igual manera se utiliza el
operador & para obtener las direcciones de memoria de las variables Entero2 y Entero3
para luego asignar dichas direcciones a las variables puntero2 y puntero3
respectivamente.*/
return 0;
}

*
En el ejemplo, usando el se declararon 3 variables tipo puntero, preparadas para apuntar a variables de tipo
entero, después se declararon 3 variables tipo entero y por último, se asigna a cada puntero una dirección de
memoria.
Notar que las variables Entero1, Entero2 y Entero3 todavía no contienen ningún valor inicial conocido. 9
PROGRAMACIÓN I - FACET - UNT
Punteros
#include <stdio.h> Notar que el *, se usa aquí
int main( ){ para declarar punteros

int *puntero1, *puntero2;/* el * se usa aquí para declarar variables puntero a entero*/

*
int Entero1, Entero2; /*Declaración de variables tipo entero*/

puntero1 = &Entero1; /*puntero1 ahora apunta a la variable Entero1 */


puntero2 = &Entero2; /*puntero2 ahora apunta a la variable Entero2 */

Entero1 = 315; /* Entonces *puntero1 es igual a 315 */


*puntero2 = 196; /* Es igual que escribir Entero2 = 196 */

/*En estas dos últimas líneas, el operador * permite acceder al contenido de la


variable a la que apunta */
Notar que el * se usa también
return 0; para acceder a la variable que
} está apuntando el puntero

*
En el ejemplo, usando el se declararon 2 variables tipo puntero, preparadas para apuntar a variables de tipo
entero, después se declararon 2 variables tipo entero, luego se asigna a cada puntero una dirección de memoria.
*
Dado que puntero1 apunta a Entero1, se puede acceder a la variable Entero1 usando el operador , entonces
*puntero1 se puede utilizar para mostrar el contenido de Entero1 o también se puede utilizar para asignar o
cambiar el valor de Entero1. De igual manera sucede con *puntero2 y Entero2. 10
PROGRAMACIÓN I - FACET - UNT
Punteros
#include <stdio.h>
int main( ){

int *puntero1, *puntero2;/* el * se usa aquí para declarar variables puntero a entero*/

int Entero1, Entero2; /*Declaración de variables tipo entero*/

puntero1 = &Entero1; /*puntero1 ahora apunta a la variable Entero1 */


puntero2 = &Entero2; /*puntero2 ahora apunta a la variable Entero2 */

Entero1 = 315; /* Entonces *puntero1 es igual a 315 */


*puntero2 = 196; /* Es igual a escribir Entero2 = 196 */

printf("\n Entero1 = %i, Entero2 = %i\n", Entero1, Entero2);


printf("\n *puntero1 = %i, *puntero2 = %i\n", *puntero1, *puntero2);

return 0;
}

Salida por pantalla

11
PROGRAMACIÓN I - FACET - UNT
Punteros
#include <stdio.h>
int main( ){
int *puntero1, *puntero2;/* el * se usa aquí para declarar variables puntero a entero*/

int Entero1, Entero2; /*Entero1 y Entero2 están SIN valor inicial, por lo tanto pueden
contener cualquier valor aleatorio*/
Notar que Entero1 y
puntero1 = &Entero1; /*puntero1 ahora apunta a la variable Entero1 */ Entero2 no tienen
puntero2 = &Entero2; /*puntero2 ahora apunta a la variable Entero2 */ asignado un valor
inicial. Entonces el
printf("\n Entero1 = %i, Entero2 = %i\n", Entero1, Entero2); valor que contendrán
printf("\n *puntero1 = %i, *puntero2 = %i\n", *puntero1, *puntero2); será cualquier valor
printf("\n puntero1 = %p, puntero2 = %p\n", puntero1, puntero2);
desconocido
printf("\n &Entero1 = %p, &Entero2 = %p\n", &Entero1, &Entero2);
(NO necesariamente
return 0; igual a cero)
}

Dirección de memoria de las


Salida por pantalla variables Entero1 y Entero2
Notar que para en formato hexadecimal
mostrar la dirección de
memoria se utiliza %p
12
PROGRAMACIÓN I - FACET - UNT

También podría gustarte