punteros
Download
Skip this Video
Download Presentation
Punteros

Loading in 2 Seconds...

play fullscreen
1 / 34

Punteros - PowerPoint PPT Presentation


  • 250 Views
  • Uploaded on

Punteros. Direcciones, Arreglos y Argumentos de Funciones. ¿Que es un Puntero?. Definición Un puntero (u apuntador) es una variable cuyo contenido es una dirección de memoria (generalmente de otra variable) Desde el punto de vista del almacenamiento, un puntero posee un tamaño de

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Punteros' - eldon


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
punteros

Punteros

Direcciones,

Arreglos y Argumentos de Funciones

que es un puntero
¿Que es un Puntero?

Definición

Un puntero (u apuntador) es una variable cuyo contenido es una dirección de memoria (generalmente de otra variable)

Desde el punto de vista del almacenamiento, un puntero posee un tamaño de

  • 2 bytes para punteros near (dentro del mismo segmento de datos)
  • 4 bytes para punteros far (fuera del segmento de datos)

Importante:

El contenido de estos bytes se interpreta como una dirección

importancia de los punteros
Importancia de los Punteros

Los punteros son importantes, principalmente, por las siguientes razones:

  • Proporcionan los medios para que las funciones puedan modificar sus argumentos de llamada.
  • Se utilizan como sistemas de asignación dinámica de memoria en C.
importancia de los punteros1
Importancia de los Punteros

Los punteros son importantes, principalmente, por las siguientes razones:

  • Hacen posible el uso de ciertas estructuras de datos tales como listas o árboles binarios.
  • Proporcionan la manera de devolver varios datos desde una función mediante los argumentos de la misma.
declaraci n de punteros
Declaración de punteros

La declaración de un puntero consta de:

  • Tipo base
  • Carácter *
  • Nombre de variable

Formato general para la declaración de una variable puntero

Tipo_base *nombre_de_variable;

declaraci n de punteros1
Declaración de punteros
  • Tipo base

Define el tipo de las variables a las cuales puede hacer referencia el puntero

En teoría, cualquier tipo de puntero puede referenciar cualquier zona de la memoria (área de datos).

Los punteros pueden ser:

    • Tipificados
    • Genéricos (sin tipo)

Siendo mas comunes los primeros, puesto que sobre ellos puede aplicarse lo que luego veremos como “aritmética de punteros”

declaraci n de punteros2
Declaración de punteros
  • Carácter *

Indica que es una variable de tipo puntero y no una variable común del tipo especificado

  • Nombre de variable

Debe respetar todas las reglas para nombres de variables

declaraci n de punteros3
Declaración de punteros

Ejemplos

int *edad;

float *altura;

char *ptchar;

long *cantidad;

operadores de punteros
Operadores de Punteros

Existen dos operadores especiales de punteros

& Y *

&Es un operador unario que devuelve la dirección de memoria de su operando. O sea la posición interna de la variable en la computadora, que no tiene nada que ver con el valor de la variable.

operadores de punteros1

p apunta a num

Operadores de Punteros

Ejemplo

p=#

Dir de Memoria

Contenido

Variable

p

1004

1000

1001

1002

1003

1004

.

.

.

num

operadores de punteros2
Operadores de Punteros

Cuidado!!!

No se pude asignar arbitrariamente una dirección a una variable, por lo tanto el operador & no puede estar del lado izquierdo en una asignación. Expresiones como la que sigue no son válidas

&x=constante;

operadores de punteros3
Operadores de Punteros

*Es un operador unario, operador de indirección o desreferencia, cuando se aplica a un puntero, da acceso al objeto al que señala el apuntador.

p=#

Contnum=*p;

/*se asigna a contnum el valor de num*/

inicializaci n de punteros
Inicialización de Punteros

Importancia:

  • Un puntero no inicializado puede provocar el fallo del sistema.
  • Los errores con punteros no inicializados son difíciles de detectar.
inicializaci n de punteros1
Inicialización de Punteros

Se inicializa mediante el operador &

  • void main()
  • {
    • char ch=‘a’;
    • char *ptrchar;
    • ptrchar=&ch;
  • }

Ptrchar ha sido inicializado con la dirección de ch.

inicializaci n de punteros2
Inicialización de Punteros

La constante 0 puede ser asignada a un apuntador y este puede compararse con 0.

La constante NULL, definida en <stdio.h>, se usa como mnemónico de este valor.

Ejemplo de expresiones válidas:

if(ptr==NULL)

{...}

ptr=NULL;

operaciones con punteros
Operaciones con Punteros
  • Asignaciones
    • Asignación indirecta

var=*ptr;

*ptr=25;

    • Asignación de punteros

ptr2=ptr1;

operaciones con punteros1
Operaciones con Punteros
  • Aritmética de punteros

Solo se pueden usar dos tipos de operaciones, la suma y la resta:

Ptr+=10;

Ptr++;

Ptr--;

Ptr2-ptr1; //cuidado al interpretar el resultado

No se puede multiplicar, dividir ni sumar punteros entre sí.

operaciones con punteros2
Operaciones con Punteros
  • Comparación de punteros

Se pueden comparar punteros en una expresión relacional.

Ejemplo:

//p y q punteros

if(p<q)

printf(“p apunta a una posición de memoria inferior a q”);

importancia del tipo base
Importancia del Tipo Base

Las operaciones con punteros están fuertemente ligadas al tipo base de los mismos.

Ejemplo

ptr1=ptr1+9;

No posiciona a ptr1 9 bytes a la derecha, sino 9*tamaño del tipo_base

importancia del tipo base1
Importancia del Tipo Base

Ejemplo:

int a; //suponemos a en la posición 1000

int *p1;

p1=&a;

p1=p1+3;

1

2

a

1000

1001

1002

1003

1004

1005

1006

.

.

p1

1

2

1000

p1

1006

importancia del tipo base2

pint

pfloat

pint+1

pint+2

pfloat+1

Importancia del Tipo Base

Ejemplo:

Memoria

char *pch=3000;

int *pint=3000;

float *pfloat=3000;

ch

ch+1

ch+2

ch+3

ch+4

.

.

.

3000

3001

3002

3003

3004

3005

3006

3007

importancia del tipo base3

a

a

b

b

Importancia del Tipo Base

Tipo del puntero vs. Tipo de la variable

int *ptr, a;

long b;

ptr=&a;

ptr=&b;

1

2

ptr

1

2

ptr

punteros y arreglos
Punteros y Arreglos

La declaración

int mat[10];

Implica una sucesión consecutiva de elementos enteros que pueden referenciarse en forma indexada como

mat[0] mat[1] mat[2]

Si declaramos un puntero int *p;

Vemos que

P=&mat[0] es idéntico a p=mat

punteros y arreglos1
Punteros y Arreglos

Con esto acabamos de comprobar que el nombre de un arreglo (sin índice) establece un puntero al comienzo del arreglo.

Ejemplo:

p=mat;

p

0 1 2

i

n

mat

punteros y arreglos2
Punteros y Arreglos

Diferencia Importante:

A pesar de que el nombre del arreglo (sin índice) implica un puntero al primer elemento del mismo, su comportamiento no es exactamente el de un apuntador.

Por ejemplo mat++ es una operación no permitida, pues se perdería la referencia al primer elemento y el arreglo quedaría inaccesible.

punteros y arreglos3
Punteros y Arreglos

Para acceder al tercer elemento, puede usarse cualquiera de estas formas:

mat[2] o *(p+2) o *(mat+2)

Sin embargo p sigue apuntando al primer elemento del arreglo.

punteros y arreglos4
Punteros y Arreglos

También se puede recorrer el arreglo, desplazando el puntero dentro del arreglo incrementándolo o decrementándolo

p+=2;

sitúa el puntero en el tercer elemento del arreglo y

*p

Permite el acceso al elemento del mismo.

punteros y arreglos5
Punteros y Arreglos

Un cuidado a tener en cuenta es que C no realiza chequeos de límites en los arreglos, por lo cual queda bajo la responsabilidad exclusiva del programador.

argumentos de funciones
Argumentos de funciones

Se pueden pasar argumentos a una función de dos maneras:

  • Por valor

El dato es copiado a la función, cualquier alteración dentro de la misma no afecta al dato en la función llamante.

  • Por referencia

La dirección del dato es pasada a la función, y el mismo puede ser accedido desde ella, alterando el dato en la rutina llamante.

argumentos de funciones1
Argumentos de funciones

Pasaje de argumentos por referencia:

  • Declaración

Tipo nombre_func(tipo *nombre_arg_form,...);

  • Llamada

Nombre_func(&arg_act);

resumen
Resumen
  • Un puntero en una variable que guarda una dirección de memoria, generalmente de otra variable.
  • Para declararlos se usa el caracter *.
  • Para inicializarlos se usa & y para acceder a lo apuntado *.
  • Operaciones
    • Asignaciones.
    • Algunas operaciones aritméticas.
    • Comparaciones.
resumen1
Resumen
  • Un arreglo es un puntero especial.
  • C no controla algunas operaciones con punteros como los límites de los arreglos o el uso de punteros no inicializados, ser cuidadoso.
  • A las funciones se les puede pasar un argumento de dos maneras:
    • Valor copia del dato
    • Referencia dirección del dato
bibliograf a recomendada
Bibliografía Recomendada
  • Borland C++ - Manual de Referencia

Herbert Schild - McGraw-Hill/Interamericana de España, S.A.U.

  • Taller de Lenguajes I - Apuntes de la Materia

Ing. Juan Manuel Conti - Facultad de Ciencias exactas y Tecnología

  • El Lenguaje de Programación C

Brian W. Kernighan, Dennis M. Ritchie

Prentice-Hall Hispanoamericana, S.A.

bibliograf a recomendada1
Bibliografía Recomendada
  • Programación en C

Byron S. Gottfried - McGraw-Hill

  • Como programar en C/C++

H. M. Deitel y P. J. Deitel - Prentice Hall Hispanoamericana