Está en la página 1de 35

Evaluacin escrita

Indique como se realiza la declaracin y la


llamada a una funcin
Indique como se declara y asigna valores a un
array
Describa las ventajas de usar estructuras y como se
declaran

Ejercicios

Elabore un programa que lea una cadena de 50


caracteres y convierta las vocales en maysculas
Elabore un programa que obtenga el determinante
de una matriz 3x3 ingresada por el usuario

PUNTEROS
(
(APUNTADORES)
)
Sugerencias y herramientas para crear para crear y presentar diapositivas en
formato panormico

Contenido

Direcciones en memoria
Concepto de puntero
(apuntador)
P t
Puntero
nullll y void
id
Punteros a punteros
Punteros a Arrays
Arrays de punteros
Punteros a cadenas

Aritmtica de p
punteros
Punteros constantes frente
a punteros a constantes
Punteros como argumento
de funciones
Punteros a funciones
Punteros a estructuras
Ejercicios
j

Direccin de memoria

Cuando una variable se declara,, se asocian tres


atributos fundamentales con la misma: su nombre, su
tipo y su direccin de memoria
Int

n;
Asocia al nombre n, el tipo
p int y la direccin de alguna
g
posicin de memoria donde se almacena el valor de n

Cont
Cont

Al valor de la variable se accede p


por medio de su
nombre. Por ejemplo, se puede imprimir el valor de n
con la sentencia;

Printf (%d,n);

A la direccin de la variable se accede por medio del


operador de direccin &. Por ejemplo, se puede
imprimir la direccin de n con la sentencia:

P i tf (%p,&n);
Printf
(% & )

Ejemplo 10.1
10 1

Obtener el valor y la direccin de una variable

#include
#
l d <stdio.h>
d h
#include <stdlib.h>
int main ()
{
int n=75;
printf("n=%d\n",n);
printf("&n=%p\n"
printf(
&n=%p\n ,&n);
&n);
system("pause");
return 0;
}

Concepto de puntero (apuntador)

Un puntero es una variable que contiene una direccin de memoria


El tipo de variable que almacena una direccin se denomina puntero
Los punteros se rigen por estas reglas bsicas:

Un puntero es una variable como cualquier otra;


Una variable puntero contiene una direccin que apunta a otra posicin
en memoria
En esa posicin se almacenan los datos a los que apunta el puntero
Un puntero apunta a una variable de memoria

Ejemplo 10.2
10 2

#include <stdio.h>
#i l d <stdlib.h>
#include
< dlib h>
int main ()
{
i n=75;
int
75
int*p=&n;
printf("n=%d, &n=%p, p=%p\n",n,&n,p);
printf("&p=%p\n",&p);
i tf("& % \ " & )
system("PAUSE");
return 0;
}

Declaracin de punteros

Al igual
g
que cualquier
q
q
variable,, las variables p
punteros
han de ser declaradas antes de utilizarlas. La
declaracin de una variable puntero debe indicar al
compilador el tipo de dato al que apunta el puntero;
para ello se hace preceder a su nombre con un
asterisco (*)
<tipo de dato apuntado>*<identificador de puntero>
Fl t*f
Float*f;

Inicializacin de punteros

La inicializacin de un puntero proporciona a ese puntero la


direccin del dato correspondiente. Para asignar una
direccin de memoria a un puntero se utiliza el operador de
referencia &.
&valor

Int i;
Int *p;
P=&i; /*asigna la direccin de i a p*/
*p=50;
p 50; /*asigna
/ asigna un valor a la direccin de memoria
memoria*//

Indireccion de punteros

El uso de un puntero
para obtener el valor
al que apunta
apunta, es decir,
decir
su dato apuntado se
denomina indireccionar
el puntero

#include <stdio.h>

#include <stdlib.h>
<stdlib h>

char c;

int main()

char *pc;

pc=&c;

for(c='A';c<='Z';c++)

printf("%c",*pc);

printf("\n");

system("pause");

return 0;

Punteros null y void

Un puntero nulo no apunta a ninguna parte, no direcciona ningn dato


valido
lid en memoria
i

Otra forma de declarar un puntero nulo es asignar un valor de 0

#define NULL 0
Int *ptr=0;

Los punteros nulos se utilizan con frecuencia en programas con arrays de


punteros
En C se puede declarar un puntero de modo que apunte a cualquier tipo
de dato, es decir, no se asigna a un tipo de dato especifico. El mtodo es
declarar el puntero como puntero void* denominado puntero genrico

Void *prt

Punteros a punteros

Un puntero puede apuntar a otra variable puntero. Este


concepto se utiliza con mucha frecuencia en programas
complejos
p j de C. p
para declarar un p
puntero a un p
puntero
se hace preceder a la variable con dos asteriscos (**)
Int valor_e=100;;
Int *ptr1=&valor_e;
Int **ptr5=&ptr1;
ptr5 &ptr1;

Punteros y Arrays

Se p
pueden direccionar arrays
y como si fueran
punteros y punteros como si fueran arrays. La
posibilidad de almacenar y acceder a punteros y
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 C. no existen variables de cadena,
i
nicamente
constantes de
d cadena
d

Nombres de arrays como punteros

Un nombre de un array es simplemente un puntero.


Supongamos que se tiene la siguiente declaracin de un
array:
In lista[5]={10,20,30,40,50}
lista[5]={10 20 30 40 50}
Si se manda a visualizar lista[0] se vera 10 y si se manda a
visualizar *lista. Como un nombre de un array es un puntero,
tambin se vera 10
0
Dado que un nombre de un array contiene la direccin del
primer elemento del array,
array se debe indireccionar el puntero
para obtener el valor del elemento

Arrays de punteros

Si se necesita reservar muchos p


punteros a muchos
valores diferentes, se puede declara un array de
punteros. Un array de punteros es un array que
contiene como elementos punteros, cada uno de los
cuales apunta a un tipo de dato especifico. La linea
siguiente reserva un array de diez variables puntero a
enteros:
Int *ptr[10];
ptr[10];

Inicializacin de un array de punteros a cadenas

La inicializacin de un array de punteros a cadenas


se puede realizar con una declaracin similar a
esta;
Char
*
*nombres_meses[12]={enero,febrero,marzo,
b
[12]={
f b

abril,mayo,junio,julio,agosto,septiembre,
octubre,noviembre,diciembre};
b i b di i b }

Punteros de cadenas

Los p
punteros se p
pueden utilizar en lugar
g de ndices
de arrays. Considrese la siguiente declaracin de
un array de caracteres que contiene las letras del
alfabeto;
Char alfabeto[27]=ABCDE.z;
[ ]
;
P=&alfabeto[0]
Printf(%c\n
Printf(
%c\n ,*p);
p);

Aritmtica de punteros

Al contrario que un nombre de un array, que es un puntero constante y no


se puede
d modificar,
difi
un puntero
t
es una variable
i bl que se puede
d modificar.
difi
Como consecuencia, se pueden realizar ciertas operaciones aritmticas
sobre punteros
A un puntero se le puede sumar o restar un entero n; esto hace que apunte
n posiciones adelante, o atrs del actual. Las operaciones no validas son;
suma, multiplicacin o divisin entre dos punteros

Float m[20];
Float *r;
r=m;
r++

Ejemplo conversin de caracteres 10.8


10 8

Convierte caracteres de minsculas a maysculas

Punteros constantes frente a punteros a constantes

Un puntero constante es un puntero que no se puede


cambiar, pero que los datos apuntados por el
puntero pueden ser cambiados.
cambiados Por otra parte,
parte un
puntero a una constante se puede modificar para
apuntar a una constante diferente,
diferente pero los datos
apuntados por el puntero no se pueden cambiar

Punteros constantes

Para crear un puntero constante diferente de un array,


se debe utilizar el siguiente formato:
<Tipo de dato>*const<nombre puntero>=<direccin de
variable>;
Int x;
Int y;
Int *const p1=&x;
*p1=y, es legal ya que se cambia el contenido de memoria
p1=&y , no es legal ya que se cambia el valor del puntero

Punteros a constantes

El formato p
para definir un puntero
p
a una constante es;;
Const<tipo de dato elemento>*<nombre
puntero>=<direccin de constante>;
Const int x=25;
Const int y=50;
Const int *p1=&x;
P1=&y, p1 apunta a otra constante
*p1=15,
* 1 15 crea un error de
d compilacin
il i

Punteros constantes a constantes

El ultimo caso a considerar es crear punteros constantes


a constantes utilizando el formato siguiente;
Const <tipo de dato elemento> *const <nombre
puntero>=<direccion de constante>;
Const int x=25;
Const int *const p1=&x;
p
;
P1 es un entero constante que apunta a una constante
entera x, cualquier intento de modificar p1 o bien *p1
producir un error

Punteros como argumentos de funciones

Cuando se pasa una variable a una funcin (paso por valor)


no se puede cambiar el valor de esa variable. Sin embargo,
si se pasa un puntero a una variable a una funcin (paso
por direccin)) se p
p
puede cambiar el valor de la variable

Void func1 (int *s, int t)


{
* 6
*s=6;
t=25;
}

int i, j;
i=5;
j 7
j=7;
func1 (&i, j);

Punteros a funciones

Es p
posible crear p
punteros q
que apunten
p
a funciones. En lugar
g
de direccionar datos, los punteros de funciones apuntan a
cdigo ejecutable. Al igual que los datos, las funciones se
almacenan en memoria y tienen direcciones iniciales.
iniciales En C se
pueden asignar las direcciones iniciales de funciones a
punteros. Tales funciones se p
p
pueden llamar en un modo
indirecto, es decir mediante un puntero cuyo valor es igual a
la direccin inicial de la funcin en cuestin

Ti
Tipo_de_retorno
d
(*
(*punteroFuncion)
F i ) (<lista
( li de
d parametros>);
)

Cont
Cont

Un p
puntero a una funcin es simplemente
p
un p
puntero cuyo
y
valor es la direccin del nombre de la funcin. Dado que el
nombre es, en si mismo, un puntero; un puntero a una funcin
es un puntero a un puntero constante

Inicializacin de un puntero a una funcin

La sintaxis general para inicializar un puntero a una funcin


es:
punteroFuncion = una funcin

double calculo (int*v;


(int*v unsigned n);
n) /*prototipo de funcin*/
double (*qf) (int*, unsigned); /*puntero a funcin*/
Int r[5]={3,5,6,7,1}
{
}
double x;
qf=calculo; /*asigna direccin de la funcin*/
x=qf(r,5);
=qf(r 5) /*llamada a la funcin
f ncin con el p
puntero
ntero a funcin*/
f ncin*/

Ejemplo 10.6
10 6

Se desea ordenar un array de numero reales, la


ordenacin se va a realizar con la funcin qsort()

Arrays de punteros de funciones

Ciertas aplicaciones
p
requieren
q
disponer
p
de numerosas
funciones, basadas en el cumplimiento de ciertas
condiciones. Un mtodo para implementar tal aplicacin es
utilizar una sentencia switch con muchos selectores case.
case
Otra solucin es utilizar un array de punteros de funcin. Se
puede seleccionar una funcin de la lista y llamarla
p
La sintaxis general de un array de punteros de funcin es:

tipoRetorno (*PunteroFunc[LongArray])(<lista de parametros>)

Punteros a estructuras

Un p
puntero tambin p
puede apuntar
p
a una estructura. Se
puede declarar un puntero a una estructura tal como se
declara un puntero a cualquier otro objeto y se declara
un puntero estructura tal como se declara cualquier otra
variable estructura: especificando un puntero en lugar
del nombre de la variable estructura
Strcuct persona *p; /*se crea un puntero de estructura*/
p=&empleado;

Ejemplo 10.9
10 9

En este ejemplo se declara el tipo estructura


t_persona, que se asocia con el tipo persona para
facilidad de escritura.
escritura Un array de esta estructura
se inicializa con campos al azar y se muestran por
pantalla

Ejercicios

Escribir un programa en que se lean 20 lneas de texto, cada lnea


con un mximo
i de
d 80 caracteres. Mostrar
M
por pantalla
ll ell numero de
d
vocales que tiene cada lnea
Se requiere evaluar las funciones f(x), g(x) y z(x) para todos los
valores de x en el intervalo 0<=x<=3.5 con incrementos de 0.2.
escribir un programa que evalu dichas funciones, utilizar un array
de punteros a funcin.

Las funciones son las siguientes;


F(x)=3*ex-2x
G(x)=-x*Sin(x)+1.5
( )
( )
Z(x)=x3-2x+1

Patrn de prueba de pantalla panormica (16:9)

Prueba de la
relacin de
aspecto
(Debe parecer circular)

4x3
16x9

También podría gustarte