Está en la página 1de 14

LENGUAJE C

Ing. David Benjamín Trejo Salazar.


Ing. Julio Cesar Suarez Tapia.
Lenguaje C

 Introducción a la programación.
 Elementos Del Lenguaje C.

 Sentencias de Control.

 Arreglos.

 Funciones.

 Apuntadores.
Concepto de apuntadores (declaración e
inicialización)
Operadores de Apuntadores
Aritmética de apuntadores
Relaciones entre apuntadores y arreglos
Arreglos de apuntadores
Asignación dinámica de Memoria
Apuntadores
Apuntadores

Concepto de apuntadores (declaración e inicialización)


Los apuntadores son variables que contienen direcciones de
memoria como sus valores.
 Sintaxis:
<tipo_de_dato>* <nombre_apuntador>;
 El tipo de dato de una variable de tipo apuntador se
corresponde con el tipo de dato de la variable a la que
apunta.
 Los apuntadores pueden ser inicializados cuando son
declarados o en un enunciado de asignación.
 Pueden ser inicializados a 0, NULL o a una dirección; un
apuntador con un valor NULL apunta a nada.
Apuntadores

 Inicialización
 Estática:
 Asignar una dirección de memoria a un apuntador utilizando el
operador de dirección (&).
 Ejemplo:
int x = 0; xPtr x
int *xPtr = &x;
0
Operadores de apuntadores
 &: operador de dirección; regresa la dirección de su
operando.
 *: operador de indirección; regresa el valor del
objeto hacia el cual se apunta.
 Ejemplo:
int x = 7;
int *xPtr = &x;

printf("x=%d ",x);
printf("&x=%p ",&x);
printf("&xPtr=%p " ,&xPtr);
printf("xPtr=%p " ,xPtr);
printf("*xPtr=%d " ,*xPtr);
Operadores de apuntadores
 Representación en memoria:

xPtr x
500000 600000 600000 7

xPtr x
7
Operadores de apuntadores
 Un apuntador puede apuntar a otra variable de tipo
apuntador.
 Ejemplo:
int x = 7;
int *xPtr = &x;
int **xPtr1 = *xPtr;

printf("x=%d“ ,x);
printf("xPtr=%p“,xPtr);
printf("*xPtr=%d“,*xPtr);
printf("**xPtr=%p“,**xPtr);

 Este concepto se utiliza para problemas largos y complejos.


Relaciones entre apuntadores y
arreglos
 Los apuntadores y los arreglos están relacionados y pueden
ser utilizados “casi” en forma indistinta.
 El nombre de un arreglo (sin subíndice) puede ser considerado
un apuntador constante.
int y[4]={0,5,7,15};
int *yPtr;
yPtr = y  yPtr =&y[0]
 El elemento del arreglo y[3] puede ser referenciado de las
siguientes formas:
 Notación apuntador/desplazamiento:
y[3] == *(yPtr + 3) ; // 3 es el desplazamiento del apuntador
y[3] == *(y + 3) ;
 Notación apuntador /subíndice:
y[3] == yPtr[1];
Aritmética de apuntadores
 Los apuntadores son operandos validos en
expresiones aritméticas, en expresiones de asignación
y de comparación.
 Operaciones validas:
 Incremento (++)
 Decremento(--)

 Añadir un entero a un apuntador (+ ó +=)

 Restar un entero a un apuntador (+ ó +=)

 Un apuntador puede ser sustraído o restado a otro.


Aritmética de apuntadores
 Ejemplo para una maquina con enteros de 4 bytes.
int v[4];
int *vPtr = &v[0];

Posiciones en memoria:

3000 3002 3004 3006

vPtr
v[0] v[1] v[2] v[3]
Aritmética de apuntadores
 Cuando se añade o se resta un entero al apuntador, el
apuntador se incrementa o decrementa el valor de dicho
entero multiplicado por el tamaño del objeto al cual apunta.

vPtr+=2 (3000+2*4) = 3008

 Las variables de tipo apuntador pueden ser restadas la una a


la otra:
int V[4];
int *vPtr = v; X es el numero de elementos
int *vPtr1 = &v[2]; del arreglo v, desde vPtr
hasta vPtr1; en este caso 2;
x = vPtr1 – vPtr;
Arreglo de apuntadores
 Los arreglos pueden contener apuntadores, por ejemplo, cadena
de caracteres.
 Cada entrada en el arreglo es una cadena; en C++ una cadena
es de hecho un apuntador al primer elemento.
char *suit[4]={“Corazones”, “Diamantes”,”Espadas”,”Treboles”};

suit[0] ‘c’ ‘o’ ‘r’ ‘a’ ‘z’ ‘o’ ‘n’ ‘e’ ‘s’ ‘\0’
suit[1]
‘d’ ‘i’ ‘a’ ‘m’ ‘a’ ‘n’ ‘t’ ‘e’ ‘s’ ‘\0’
suit[2]
‘e’ ‘s’ ‘p’ ‘a’ ‘d’ ‘a’ ‘s’ ‘\0’
suit[3] ‘t’ ‘r’ ‘e’ ‘b’ ‘o’ ‘l’ ‘e’ ‘s’ ‘\0’

También podría gustarte