Punteros
This presentation is the property of its rightful owner.
Sponsored Links
1 / 34

Punteros PowerPoint PPT Presentation


  • 163 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Punteros

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


  • Login