Direcciones, Arreglos y Argumentos de Funciones

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Unidad 15 Características de C++ no relacionadas con el DOO.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Arreglos en C++ (una y dos dimensiones)
Abstracción de Datos Arrays.
Fundamentos de la Programación Estructurada
Clase 3: Punteros y Referencias
Programación I Teoría III
Programación I Teoría IV
Programación, Algoritmos y Estructuras de Datos
Tipos de Datos Básicos y Estructurados
Punteros Universidad Nacional Mayor de San Marcos
INFORMATICA I Arreglos 1 CLASE 17.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Funcionamiento, programación
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Ismael Camarero1. 2 ¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria.
Programación Estructurada
Unidad 3 Punteros.
Ingeniero Anyelo Quintero
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Conceptos Básicos de Java
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad

POO Java Módulo 3 Elementos de programas Identificadores
Compiladores II ( /04/ :03) Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4.
Tipos de Datos Básicos 1.
PUNTEROS Ó (apuntadores) EN LENGUAJE C
Diseño de algoritmos “Punteros”
Tema 9 Estructuras.
Semana 5 Subprogramas..
Introducción a los punteros
Capítulo 5. Punteros y Cadenas de Caracteres
UNIDAD V Arreglos y Cadenas
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Índice. Revisando conceptos acerca de la memoria.
Estructuras.
Unidad VI Registros (estructuras, uniones y enumeraciones)
COMPUTACIÓN I TEMA 6. Pasaje de parámetros por Referencia. Uso de apuntadores Prof. Mireya Morales.
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
Tipo de Datos Básicos.
PUNTEROS Ing Anghello Quintero.
Informática Ingeniería en Electrónica y Automática Industrial
El lenguaje de programación C - Vectores y matrices -
Archivos Programación I MC Beatriz Beltrán Martínez.
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Informática Ingeniería en Electrónica y Automática Industrial
Memoria estática versus dinámica con Estructuras
Programación en C para electrónicos
Punteros.
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
APUNTADORES.
Los punteros Programación modular.
Punteros Recomendado: 1. Nivelación Funciones
Términos algoritmo diseñar algoritmo implementar algoritmo
Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
PRINCIPIOS DE PROGRAMACIÓN
PUNTEROS EN EL LENGUAJE C
MEMORIA DINÁMICA.
1 Definición y Conversión de datos Agustín J. González ELO-329.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Transcripción de la presentación:

Direcciones, Arreglos y Argumentos de Funciones 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 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 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 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 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 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 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 punteros Ejemplos int *edad; float *altura; char *ptchar; long *cantidad;

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 Punteros Ejemplo p=# Dir de Memoria Contenido Variable p 1000 1001 1002 1003 1004 . 1004 p apunta a num num

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 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 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 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 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 Asignaciones Asignación indirecta var=*ptr; *ptr=25; Asignación de punteros ptr2=ptr1;

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 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 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 Base Ejemplo: int a; //suponemos a en la posición 1000 int *p1; p1=&a; p1=p1+3; 1 2 1000 1001 1002 1003 1004 1005 1006 . a p1 1 2 1000 p1 1006

Importancia del Tipo Base Ejemplo: Memoria ch ch+1 ch+2 ch+3 ch+4 . pint pint+1 pint+2 pfloat pfloat+1 3000 3001 3002 3003 3004 3005 3006 3007 char *pch=3000; int *pint=3000; float *pfloat=3000;

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 a b ptr a b

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 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 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 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 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 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 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 funciones Pasaje de argumentos por referencia: Declaración Tipo nombre_func(tipo *nombre_arg_form,...); Llamada Nombre_func(&arg_act);

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.

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 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 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