Introducción a variables de tipo Puntero (Apuntadores) Contenidos. 1. Introducción a las variables puntero 2. Repaso:

Documentos relacionados
Es una variable estática que, en vez de contener valores de datos, contiene valores que representan direcciones de memoria de variables.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Tema 2. El lenguaje JAVA

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Instituto Tecnológico de Celaya

Elementos de un programa en C

Apuntadores en C y C++

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Apuntadores (Punteros)

media = ( temp0 + temp1 + temp2 + temp3 + temp temp23 ) / 24; printf( "\nla temperatura media es %f\n", media );

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Introducción al tipo de dato ARRAY

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

10. PUNTEROS Y VARIABLES DINÁMICAS

Java para programadores

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Definición de Memoria

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

PROGRAMACION / Clave: 11214

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

E/S POR CONSOLA DE C++ Parte I. Elementos Básicos Dr. Oldemar Rodríguez R.

El lenguaje C. 1. Identificadores, constantes y variables

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Lenguaje C [Apuntadores y arreglos]

Introducción al lenguaje C

Funciones como Subprogramas en C++

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Ficha de Aprendizaje N 13

Introducción a C++ y Code::Blocks

Algoritmos y Programación I

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

1 Estructura básica de un programa C++

Definición. Una estructura es un grupo de datos que pueden ser de distintos tipos de datos, pero a los que se les ha asignado un único nombre.

Las plantillas permiten definir funciones genéricas.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Tema: Arreglos de Objetos en C++.

La sintaxis básica para definir una clase es la que a continuación se muestra:

OPERADORES Y EXPRESIONES

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Operadores de comparación

Arrays dinámicos y arrays estáticos con Visual Basic y.net. Redim, Redim Preserve, Erase. Ejemplos (CU00342A)

LENGUAJE. Tema 2 Elementos de un programa

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Programación estructurada (Introducción a lenguaje C)

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Se guardan en archivos con extencion c y los cabezales con extension h

Introducción a Lenguaje C. Jornadas de Octubre 2009 Grupo de Usuarios de Linux Universidad Carlos III Tania Pérez

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Estructura de Datos: Archivos

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Tema 4. Operadores y Expresiones

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Cadenas de Caracteres

El lenguaje de Programación C. Fernando J. Pereda

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Tema 3 Constantes, Variables y Tipos

#include <fstream.h> ifstream descriptor ( nombre.extensión ); ofstream descriptor ( nombre.extensión );

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

6. Vectores. 1. Introducción. 2. Declaración (I) Fundamentos de Informática Dpto. Lenguajes y Sistemas Informáticos.

Contenido. Capítulo 1. Introducción a lenguaje C 1

Arrays y Cadenas en C

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Java para no Programadores

Principios de Computadoras II

Introducción a la programación orientada a objetos

Funciones. Parámetros por valor

Procesadores de lenguaje Tema 6 La tabla de símbolos

Tema 6. Gestión dinámica de memoria

Lenguaje C Estructuras y Variables definidas por el Usuario.

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

TécniquesInformàtiques PRÀCTICA 6 (2 Sessions) Curs

AMBITO DE VARIABLES EN C. GLOBALES Y LOCALES. UNDECLARED (FIRST USE IN THIS FUNCTION). EJEMPLOS (CU00548F)

Informática I para Bachillerato

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

Representación de números enteros: el convenio exceso Z

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

PROGRAMACION ORIENTADA A OBJETOS EN C++

INTRODUCCIÓN AL LENGUAJE C++

Prof. Dr. Paul Bustamante

MANUAL DE RUBY (PARTE V) Luis José Sánchez González

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Guía rápida para gestionar el puerto paralelo del PC

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

<tipo> Tipo de dato de los elementos del vector

Transcripción:

Contenidos 1. Introducción a las variables untero 2. Reaso: - oerador de dirección: & - referencias 3. Declaración de variables de tio untero 4. Inicialización de variables de tio untero - El untero nulo: 5. Valor auntado or un untero: Indirección de unteros 6. Aritmética de unteros 7. Relación entre Arrays y unteros 8. Cadenas y unteros. 9. Punteros a estructuras. 1 Introducción El untero es una técnica muy otente que hace que la rogramación C++ sea tan utilizada. La técnica de unteros aoya a la rogramación orientada a objetos, que es una de las grandes diferencias entre C y C++. Definición: Un untero es una variable que almacena una dirección de memoria. Hasta ahora hemos visto variables 102 = que almacenan datos; los unteros almacenan direcciones de otras variables. 102 = x es una variable untero 2

REPASO: Oerador de dirección: & Cuando se declara una variable, se le asocian tres características: - nombre de la variable - tio de la variable - dirección de memoria char x = ; El valor de la variable x es. La dirección de memoria es. 100 g 0000001 MEMORIA x Para conocer la dirección de memoria donde se encuentra almacenada la variable, se uede utilizar el oerador &. cout << x; cout << &x; Se visualiza el valor: Se visualiza la dirección: 3 REPASO: Referencias Puede ser interesante declarar dos variables con la misma dirección de memoria. Para realizar ésta tarea también utilizamos el oerador &. 100 <tio> & <variable> = <variable>; g 0000001 MEMORIA z = x = #include <iostream.h> int main() { char x = ; char & z = x; cout << x << z; z = b ; cout << x << z; return 0; } La dirección de la variable z es la misma que la dirección de la variable x // x también vale b z y x son nombres diferentes ara la misma variable 4

Declaración de una variable de tio untero Para declarar una variable de tio untero, se utiliza el símbolo *. Además, la declaración de una variable de tio untero debe indicar al comilador el tio de dato al que aunta el untero. Sintaxis <tio> * <nombre_del_untero> ; Así, odemos hablar de untero a entero, untero a char, untero a float, etc. char * ; int *r ; Como ara el resto de variables, C++ no inicializa automáticamente los unteros. 102 GUARRERIA Dirección de memoria alta = = r = x Dirección de memoria baja 5 Inicialización de una variable de tio untero Es reciso inicializar las variables de tio untero antes de su uso. La inicialización roorciona al untero una dirección de memoria a la que auntar. A) Inicializar un untero a una dirección nula. char * = ; 0 = = r El untero aunta a la dirección 0. El untero no es una dirección de una variable en memoria. El untero nulo roorciona al rograma una manera de saber si un untero aunta a una dirección válida. 102 Dirección de memoria alta = x Dirección de memoria baja 6

Inicialización de una variable de tio untero Para oder usar el untero nulo, odemos hacer una de éstas dos cosas: - definirlo en la cabecera de nuestro rograma: # define 0 - incluir alguno de los archivos de cabecera donde ya se encuentra definido: # include <stdio.h> # include <string.h> 7 Inicialización de una variable de tio untero B) Inicializar un untero a una dirección de memoria válida Para asignar una dirección de memoria a un untero, se utiliza el oerador de dirección &. El oerador & alicado a una variable, devuelve la dirección donde se almacena dicha variable. &x = 0 Dirección de memoria alta = = r char * = ; char x = ; = &x ; aunta a x x 102 = x 8

Inicialización de una variable de tio untero B) Inicializar un untero a una dirección de memoria válida La inicialización también se uede hacer en la declaración. char x = ; char * = &x ; Otra forma de reresentar unteros = Es imortante tener en cuenta que el untero debe auntar a una variable del mismo tio. char x = ; int * = &x ; Error! x = 100 g 0000001 MEMORIA 9 Indirección de unteros Una vez definida e inicializada una variable de tio untero, disonemos de un mecanismo ara obtener el dato que almacena esa dirección de memoria. El símbolo * se llama también oerador de indirección y sirve ara acceder al valor al que aunta el untero. char x = ; char * = &x ; cout << *; // muestra or antalla la letra x & Oerador de dirección: Obtiene la dirección de una variable * Declara una variable untero. * Oerador de indirección. Obtiene el valor auntado or el untero. 10

Ejemlo: int y=5; int x= y*10; int * =&x; cout << *; cout << ; cout << &; Muestra el valor auntado or Muestra la dirección a la que aunta Muestra la dirección donde se almacena 100 50 5 0000001 = = x = y x 50 MEMORIA 11 Ejemlo: char c1, c2 = A ; char *1=, *2= ; 1=&c1; 2=&c2; *1 = *2; =2 =1 cout << El valor de c1 es: << c1; cout << El valor de c1 es: << *1; cout << El valor de c2 es: << c2; cout << El valor de c2 es: << *2; 100 A A? =c2 =c1 MEMORIA 12

Ejemlo: int *=; int x, y, z; =&x; x=2; y=*; * =9; int *q=, *r =; q=; r=; *r=*r+y; z y x 2 29 11 q r 13 Ejemlo: int a=10; int *; cout << ; //valor indefinido cout << *; //valor indefinido =&a; // ahora se inicializa, ero tarde. cout << ; cout << *; int a=10; int * = ; * = 9 ; Es correcto? El untero se inicializa desués de sus 2 rimeros usos. Si en vez de hacer una lectura, hubiésemos hecho una escritura, *=9, el resultado odría haber sido fatal, ya que odríamos haber accedido a osiciones de memoria indebidas. Hay que tener cuidado con no dejar un untero sin inicializar 14

Aritmética de unteros Un untero es una dirección de memoria. Las oeraciones ermitidas son: Incrementar y decrementar unteros, Sumar y restar un entero a un untero En éstas oeraciones el tio del untero es fundamental, or ejemlo si el untero es de tio int, cuando sea incrementado, lo será en 2 bytes, ara que el untero aunte al siguiente entero, no al siguiente byte. int *=; int x, y, z; = &x; ++; 1 2 x y z MEMORIA 15 Aritmética de unteros De modo similar ocurre con estructuras más comlejas. Por ejemlo si definimos la siguiente estructura: struct disco { char titulo[30]; int num_canciones; float recio; }; disco cd1 = { El iano, 15, 18}, cd2 = { Dirty work, 10, 12}; disco *_cd =&cd1; _cd = _cd + 1; Cada variable de tio disco ocua 36 bytes de memoria _cd 1 2 cd1 cd2 16

Relación entre arrays y unteros Existe una fuerte relación entre un vector y un untero. Un array es un untero. char letras[4]; letras 107 b h t 43 63 100 102 103 Cuando declaramos una variable de tio array, lo que en realidad estamos haciendo es crear un untero constante cuyo nombre no ocua memoria. cout << letras[0]; cout << *letras; cout << letras [1]; equivale a : cout << *(letras+1); cout << letras[3]; cout << *(letras+3); 17 Relación entre arrays y unteros. Ejemlo: (1) (2) int v[10]={6,0,5, 7,4,3,2,2,4,9 }; int *; = v; = v+2; El untero aunta a donde aunta v (3) (3) = &v[1]; v = ; ERROR: v es un untero constante, y or tanto no uede auntar a otro sitio (1) (2) 5 0 6 v[1] = v 18

Relación entre vectores y unteros El nombre del array sin índice se utiliza como la dirección de comienzo en la que está almacenado el array. La aritmética de unteros se utiliza de forma habitual ara acceder secuencialmente a los elementos de una array. Esta forma de acceso es más ráida que utilizar un índice. Ejemlo: int temeratura[ 10 ]; int *; = temeratura; for (int i = 0; i<10; i++) { * = 0; ++; } 19 Cadenas y unteros También odemos utilizar aritmética de auntadores ara recorrer cadenas. Ejemlo: char nombre_comleto[20] = Carmen Pérez ; char *; char *nombre; char *aellido; nombre_comleto = nombre_comleto; while ( *!= ) ++; * = \0 ; nombre = nombre_comleto; ++; aellido = ; = C a r m e n \0 P é r e z \0 \0 nombre aellido 20

Punteros a estructuras Podemos declarar un untero a una estructuras tal y como se declara ara cualquier otro tio de dato. struct disco { char titulo[30]; int num_canciones; float recio; }; disco cd1 = { El iano, 15, 18}; disco * =&cd1; Para acceder a los miembros, tenemos dos osibilidades: A) Utilizando el oerador unto (.) sobre el valor auntado or el untero (*).titulo B) Utilizando el oerador titulo 21 Punteros a estructuras 0 1 9 mis_cds = "El iano" 15 18 18112003" "18 Tracks" 18 20,5 "12122001".. "Dirty work" 10 12,75 "10091" disco * = ; = mis_cds; for (int i = 0; i<10; i++) { cout << (*).titulo; cout << (*).recio; ++; } for (int i = 0; i<10; i++) { cout << ->titulo; cout << ->recio; ++; } 22

Puntero a untero Un untero uede auntar a una variable de tio untero. Esto se utiliza con mucha frecuencia en rogramas comlejos de C++. Para declararlo onemos dos asteriscos (**) int x = 4; int * = ; int **q = ; = &x; q = &; cout << *; cout << **q; x q Estas dos instrucciones tienen el mismo efecto 4 23 Ejemlo: int x = 10, y = 5, z; int *, *q, *r; r = &z; *r =x; q = &x; *q =*r+4; =r; *=*q + *r + y ; cout << x; cout << y; cout << z; Cuál es la salida del siguiente fragmento de código? 24

Resumen Un untero es una variable que uede almacenar una dirección de memoria. El oerador de dirección &, se utiliza ara obtener la dirección de memoria de una variable. El símbolo * se utiliza ara declarar una variable de tio untero. El oerador de indirección * se utiliza ara acceder al valor auntado or un untero. Se llama de indirección, orque se accede de manera indirecta al valor almacenado en una dirección de memoria. 25