SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 1
Tema 1: PUNTEROS Y ARCHIVOS
1. Punteros
2. Archivos lógicos y físicos
3. Tipos de archivos
4. Operaciones con archivos
5. Consideraciones sobre el acceso secuencial y
directo
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 2
float *valor;
Polinomio *P1;
1. Punteros
1.1. Concepto de puntero.
Un puntero, hablando de manera aproximada, es una variable
de tipo entero que contiene un valor numérico que es en
realidad la dirección de memoria donde está situada otra
variable del programa.
La distinción entre una variable de tipo entero y un puntero es
la interpretación semántica del valor que contiene.
La diferencia entre ambas variable es:
 La variable Dato se va a utilizar (su valor) para una operación de tipo aritmético
 La variable PDato se utilizará para
guardar la dirección de memoria donde
se encuentra la variable Dato.
1.2. Declaración de variables de tipo puntero.
Una variable puntero se declara exactamente igual que una variable normal añadiendo antes del
identificador uno o más asteriscos ‘*’.
Cuando se declara un puntero sólo se está reservando una posición de memoria donde se va a
almacenar la dirección de otra variable, pero no se reserva memoria para la variable apuntada.
5004
5000
5012
4005008 Dato
50085016 PDato
int Dato;
Ejemplo 1. Representación de la
memoria interna
5008
5016
PDato 400
5008
Dato
Ejemplo 2. Representación Gráfica.
Polinomio
Polinomio
Polinomio
float
?
7350
valor
?
14670
P1
Datos estáticos
o Dinámicos
Ejemplo 3. Representación gráfica de la declaración de dos punteros.
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 3
La zona de memoria donde apunta un puntero puede ser además otro puntero que apunte a otra
zona de memoria. Esto se conoce como encadenamiento de punteros.
Este tipo de estructuras se le denominan estructuras de dos o más niveles, ya que para acceder al
dato (en este caso un objeto Cliente) se necesita pasar por dos punteros, uno la variable puntero
(PPC1) y otro el puntero que es apuntado por PPC1. Existen estructuras de más de dos niveles.
1.3. Declaración de tablas de punteros.
Se declara una tabla de punteros añadiendo a la declaración de un puntero el tamaño de cada
dimensión. Hay que tener en cuenta que cuando se declara una tabla de punteros sólo se reserva
memoria para la tabla y no para los datos a los que apuntará cada puntero.
Cliente
?
Datos estáticos
o Dinámicos
?
7831
PPC1
cliente **PPC1; //Dos asteriscos
Ejemplo 4. Representación gráfica del encadenamiento de punteros.
? ? ? ? ?TP1
150701506614670 14674 14678
Polinomio
Polinomio
Polinomio
TPValor ? ? ? ?
7362735873547350
float
float
float
Datos estáticos
o Dinámicos
float *TPValor[4];
Polinomio *TP1[10];
Ejemplo 5. Representación gráfica de dos tablas de punteros.
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 4
En el ejemplo, se está declarando una tabla de cuatro punteros a reales (no cuatro reales) y una
tabla de 10 punteros a objetos Polinomio (no 10 objetos Polinomio).
Se puede dar el caso de que varios punteros apunten a la misma variable. Para ello el valor de la
dirección de memoria será el mismo para ambos punteros. Tampoco es infrecuente encontrar tablas
de punteros de más de un nivel como por ejemplo:
1.4. Operaciones con punteros.
1.4.1. Inicialización.
Las variables puntero han de ser inicializadas
con direcciones de memoria o con un valor
especial que indica una dirección nula, la
constante NULL.
1.4.2. Asignación.
Existe el operador de referencia ‘&’ que nos devuelve la dirección de una variable si éste se coloca
justo delante del identificador de la variable.
cliente **TPC1[10]; //Cada puntero de esta tabla apuntará a
//otro puntero que a su vez apuntará a
//un objeto cliente
7350
PValor NULL
7350
PValor
float *PValor=NULL;
Polinomio **PPolinomio=NULL;
Ejemplo 6. Representación gráfica
50.6
2345
Valor
7350
PValor
float *PValor=NULL, Valor=50.6;
2345
7350
PValor 50.6
2345
Valor
Pvalor = &Valor;
//&Valor devuelve la
//dirección de Valor, 2345
Ejemplo 7. Ejemplo de declaración, inicialización y asignación de variables puntero.
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 5
1.4.3. Acceso.
En todo momento se puede acceder a dos tipos de información: al propio valor de la variable
puntero (mediante el identificador de la misma) y a la información a la que apunta mediante el
operador denominado desreferencia ‘*’.
Utilizando el ejemplo anterior:
Nota: Dependiendo del lugar donde aparece, el símbolo ‘*’ tiene un significado distinto.
Para acceder a los campos (métodos) de una estructura (clase)
apuntados por una variable puntero se puede utilizar el
operador punto ‘.’ .
El operador ‘->’ simplifica la escritura de programas. Como
podemos ver en el siguiente ejemplo, el operador ‘->’ nos
indica que el nombre del cliente está apuntado y accedido a
través el puntero PCli.
1.4.4. Comparación
Una variable puntero puede ser comparada con otra variable puntero o con la constante NULL;
aunque todos los operadores relacionales están permitidos, sólo los operadores != y == tienen una
verdadera utilidad práctica.
float *PValor=NULL, Valor=50.6;
float *Copia_de_PValor=NULL, Suma;
Pvalor = &Valor;
Copia_de_Pvalor = PValor; /* PValor devuelve su contenido, es
decir 2345, que es la dirección de la variable Valor */
Suma = *Pvalor + 10; //Suma contiene 60.6
float Producto = *Pvalor * *PValor; //Contiene 50.6*50.6=2560.36
Cliente *PCli=NULL, Cli;
PCli = &Cli;
(*PCli).Edad = 20;
cout << (*PCli).Nombre;
Cliente *PCli=NULL, Cli;
PCli = &Cli;
PCli->Edad = 20;
cout << PCli->Nombre;
2345
7350
PValor1 50.6
2345
Valor1
5678
8278
PValor2 30.2
5678
Valor2
Ejemplo 8. Representación gráfica del ejemplo
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 6
La salida por pantalla del código del ejemplo anterior es el siguiente:
 Comparación 1ª:
Valor1 está situada en la memoria antes de Valor2
 Comparación 2ª
30.2 es menor o igual que 50.6
La primera condición es verdadera ya que el contenido de PValor1 es menor que el contenido de
PValor2 (2345 < 5678) y la segunda condición es falsa (50.6 < 30.2).
1.5. Creación de variables dinámicas.
Mediante el uso de punteros se nos permite disponer de nuevas variables en tiempo de ejecución.
Las variables dinámicas tienen como identificador la dirección de memoria donde están situadas. El
programador tiene la responsabilidad de solicitar la creación y eliminación de variables dinámicas.
En el lenguaje C++ se cuenta con el operador new para solicitar el uso de memoria dinámica. Posee
la capacidad de ejecutar los constructores definidos en la clase del objeto que se instancia. Además
permite traspasar valores a los parámetros definidos en los constructores de la clase.
float *PValor1 = NULL, *PValor2 = NULL, Valor1 = 50.6, Valor2 = 30.2;
PValor1 = &Valor1;
PValor2 = &Valor2;
if (PValor1<PValor2) //Comparación 1ª
cout << ”Valor1 está situada en la memoria antes de Valor2”;
else
cout << ”Valor2 está situada en la memoria antes o en la misma
posición de Valor1”;
if (*PValor1 < *PValor2) //Comparación 2ª
cout << *PValor2 << ” es mayor que ” << *PValor1;
else
cout << *PValor2 << ” es menor o igual que ” << *PValor1;
14670
7350
tabla
? ? ? ? ?
1487014868146741467214670
9854
3213
v ?
9854
//Crea una variable dinámica de tipo float
float *v = new float;
//Crea una tabla dinámica de 100 enteros
int *tabla = new int[100];
Ejemplo 9. Ejemplos de creación de variables dinámicas y de tablas con memoria dinámica
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 7
Todas las funciones y operadores que reservan memoria, devuelven o bien la dirección de memoria
reservada o bien la constante NULL para indicar que el S.O. no ha encontrado ninguna zona de
memoria con el tamaño que ha sido solicitado.
1.6. Eliminación de variables dinámicas.
C++ permite la liberación de memoria dinámica con el operador delete. Posee la capacidad de
ejecutar el destructor definido en la clase del objeto que se destruye.
delete v;
delete [] tabla;
// para liberar un array creado dinámicamente con new
// invoca al destructor de cada elemento del array
1.7. Aritmética de punteros.
Como toda variable numérica, las variables de tipo puntero permiten realizar ciertas operaciones
aritméticas sobre la dirección de memoria que almacenan. Las operaciones normales son la suma y
resta de posiciones de memoria.
5373
5373
12568
C2 “Antonio”
28343334
cliente *C1 = new cliente;
/*Crea un objeto cliente en memoria dinámica
y ejecuta el constructor por defecto*/
cliente *C2 = new cliente(“Antonio”, 28343334);
/*Crea un objeto cliente en memoria dinámica
y ejecuta el constructor con dos parámetros,
nombre y dni*/
Ejemplo 10. Ejemplo en C++ de creación de estructuras de datos en memoria dinámica.
14670
7350
tabla
0 1 2 98 99
1487014868146741467214670
int *tabla = new int[100];
for (int i=0; i<100; i++)
tabla[i] = i;
Ejemplo 11. Creación e inicialización de una tabla dinámica.
Tema 1: Punteros y archivos Estructuras de Datos I
Departamento de Tecnologías de la Información – Universidad de Huelva 8
Una vez que se agrega un valor a un puntero, puede que se produzcan resultados inesperados,
efectos colaterales e incluso la pérdida de información.
El estado anterior de la tabla es tal que el primer elemento de la tabla es el valor 2 y no el 0 y
además el número de elementos de la tabla es de 98 elementos y no de 100.
Este funcionamiento es independiente del tipo de datos de la variable puntero. La agregación de
valores a una variable puntero incrementa su contenido en el mismo número de bytes que ocupa el
tipo de la variable puntero.
14674
7350
tabla
0
14670
1
14672
2
14674
98
14868
99
14870
tabla++; //contiene 14672 el siguiente elemento
cout << *tabla; //escribe 1 ( *tabla es igual que tabla[0])
tabla++; //contiene 14674 el tercer elemento de la tabla
cout << *tabla; //escribe 2
Ejemplo 12. Ejemplo que muestra la utilización de la aritmética de punteros.
cout << tabla[0]; //escribe 2
cout << tabla[-1]; //escribe 1

Más contenido relacionado

La actualidad más candente (19)

FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Funcion printf
Funcion printfFuncion printf
Funcion printf
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
C sharp intro0
C sharp intro0C sharp intro0
C sharp intro0
 
FUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE CFUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE C
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
02 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 302 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 3
 
Roberto orta salinas
Roberto orta salinasRoberto orta salinas
Roberto orta salinas
 
Roberto orta salinas
Roberto orta salinasRoberto orta salinas
Roberto orta salinas
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Arreglos. lidia
Arreglos. lidiaArreglos. lidia
Arreglos. lidia
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Curso C Ii
Curso C IiCurso C Ii
Curso C Ii
 
Tema 7 www.fresymetal.com
Tema 7 www.fresymetal.comTema 7 www.fresymetal.com
Tema 7 www.fresymetal.com
 
Separata java script
Separata java scriptSeparata java script
Separata java script
 
Punteros2
Punteros2Punteros2
Punteros2
 
6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mv6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mv
 
Estructuras de Lenguaje .NET
Estructuras de Lenguaje .NETEstructuras de Lenguaje .NET
Estructuras de Lenguaje .NET
 

Similar a Tema 1.1

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4hassanbadredun
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadoresFranklin Chavez
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
Programacion en WinCupl
Programacion en WinCuplProgramacion en WinCupl
Programacion en WinCuplGilbert_28
 
Apuntes para el curso de c avanzado e introduccion a c++
Apuntes para el curso de c avanzado e introduccion a c++Apuntes para el curso de c avanzado e introduccion a c++
Apuntes para el curso de c avanzado e introduccion a c++victdiazm
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
Bucle For Visual Basic
Bucle For Visual BasicBucle For Visual Basic
Bucle For Visual BasicFabianBC20
 
Programacion en java_inicio apeuntes para ems
Programacion en java_inicio apeuntes para emsProgramacion en java_inicio apeuntes para ems
Programacion en java_inicio apeuntes para emsCBTis
 
Curva de daño de un transformador c++
Curva de daño de un transformador c++Curva de daño de un transformador c++
Curva de daño de un transformador c++Marco Jiménez
 
1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptx1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptxFernando Solis
 
Taller funciones de usuario
Taller funciones de usuarioTaller funciones de usuario
Taller funciones de usuariojarol
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 finalIrving Che
 

Similar a Tema 1.1 (20)

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadores
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Programacion en WinCupl
Programacion en WinCuplProgramacion en WinCupl
Programacion en WinCupl
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Estructuras dinámicas de datos
Estructuras dinámicas de datosEstructuras dinámicas de datos
Estructuras dinámicas de datos
 
Apuntes para el curso de c avanzado e introduccion a c++
Apuntes para el curso de c avanzado e introduccion a c++Apuntes para el curso de c avanzado e introduccion a c++
Apuntes para el curso de c avanzado e introduccion a c++
 
Apuntadores
Apuntadores Apuntadores
Apuntadores
 
08 - Punteros en lenguaje C
08 - Punteros en lenguaje C08 - Punteros en lenguaje C
08 - Punteros en lenguaje C
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Bucle For Visual Basic
Bucle For Visual BasicBucle For Visual Basic
Bucle For Visual Basic
 
Programacion en java_inicio apeuntes para ems
Programacion en java_inicio apeuntes para emsProgramacion en java_inicio apeuntes para ems
Programacion en java_inicio apeuntes para ems
 
Curva de daño de un transformador c++
Curva de daño de un transformador c++Curva de daño de un transformador c++
Curva de daño de un transformador c++
 
1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptx1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptx
 
Taller funciones de usuario
Taller funciones de usuarioTaller funciones de usuario
Taller funciones de usuario
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 final
 

Último

Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 

Último (20)

Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 

Tema 1.1

  • 1. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 1 Tema 1: PUNTEROS Y ARCHIVOS 1. Punteros 2. Archivos lógicos y físicos 3. Tipos de archivos 4. Operaciones con archivos 5. Consideraciones sobre el acceso secuencial y directo
  • 2. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 2 float *valor; Polinomio *P1; 1. Punteros 1.1. Concepto de puntero. Un puntero, hablando de manera aproximada, es una variable de tipo entero que contiene un valor numérico que es en realidad la dirección de memoria donde está situada otra variable del programa. La distinción entre una variable de tipo entero y un puntero es la interpretación semántica del valor que contiene. La diferencia entre ambas variable es:  La variable Dato se va a utilizar (su valor) para una operación de tipo aritmético  La variable PDato se utilizará para guardar la dirección de memoria donde se encuentra la variable Dato. 1.2. Declaración de variables de tipo puntero. Una variable puntero se declara exactamente igual que una variable normal añadiendo antes del identificador uno o más asteriscos ‘*’. Cuando se declara un puntero sólo se está reservando una posición de memoria donde se va a almacenar la dirección de otra variable, pero no se reserva memoria para la variable apuntada. 5004 5000 5012 4005008 Dato 50085016 PDato int Dato; Ejemplo 1. Representación de la memoria interna 5008 5016 PDato 400 5008 Dato Ejemplo 2. Representación Gráfica. Polinomio Polinomio Polinomio float ? 7350 valor ? 14670 P1 Datos estáticos o Dinámicos Ejemplo 3. Representación gráfica de la declaración de dos punteros.
  • 3. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 3 La zona de memoria donde apunta un puntero puede ser además otro puntero que apunte a otra zona de memoria. Esto se conoce como encadenamiento de punteros. Este tipo de estructuras se le denominan estructuras de dos o más niveles, ya que para acceder al dato (en este caso un objeto Cliente) se necesita pasar por dos punteros, uno la variable puntero (PPC1) y otro el puntero que es apuntado por PPC1. Existen estructuras de más de dos niveles. 1.3. Declaración de tablas de punteros. Se declara una tabla de punteros añadiendo a la declaración de un puntero el tamaño de cada dimensión. Hay que tener en cuenta que cuando se declara una tabla de punteros sólo se reserva memoria para la tabla y no para los datos a los que apuntará cada puntero. Cliente ? Datos estáticos o Dinámicos ? 7831 PPC1 cliente **PPC1; //Dos asteriscos Ejemplo 4. Representación gráfica del encadenamiento de punteros. ? ? ? ? ?TP1 150701506614670 14674 14678 Polinomio Polinomio Polinomio TPValor ? ? ? ? 7362735873547350 float float float Datos estáticos o Dinámicos float *TPValor[4]; Polinomio *TP1[10]; Ejemplo 5. Representación gráfica de dos tablas de punteros.
  • 4. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 4 En el ejemplo, se está declarando una tabla de cuatro punteros a reales (no cuatro reales) y una tabla de 10 punteros a objetos Polinomio (no 10 objetos Polinomio). Se puede dar el caso de que varios punteros apunten a la misma variable. Para ello el valor de la dirección de memoria será el mismo para ambos punteros. Tampoco es infrecuente encontrar tablas de punteros de más de un nivel como por ejemplo: 1.4. Operaciones con punteros. 1.4.1. Inicialización. Las variables puntero han de ser inicializadas con direcciones de memoria o con un valor especial que indica una dirección nula, la constante NULL. 1.4.2. Asignación. Existe el operador de referencia ‘&’ que nos devuelve la dirección de una variable si éste se coloca justo delante del identificador de la variable. cliente **TPC1[10]; //Cada puntero de esta tabla apuntará a //otro puntero que a su vez apuntará a //un objeto cliente 7350 PValor NULL 7350 PValor float *PValor=NULL; Polinomio **PPolinomio=NULL; Ejemplo 6. Representación gráfica 50.6 2345 Valor 7350 PValor float *PValor=NULL, Valor=50.6; 2345 7350 PValor 50.6 2345 Valor Pvalor = &Valor; //&Valor devuelve la //dirección de Valor, 2345 Ejemplo 7. Ejemplo de declaración, inicialización y asignación de variables puntero.
  • 5. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 5 1.4.3. Acceso. En todo momento se puede acceder a dos tipos de información: al propio valor de la variable puntero (mediante el identificador de la misma) y a la información a la que apunta mediante el operador denominado desreferencia ‘*’. Utilizando el ejemplo anterior: Nota: Dependiendo del lugar donde aparece, el símbolo ‘*’ tiene un significado distinto. Para acceder a los campos (métodos) de una estructura (clase) apuntados por una variable puntero se puede utilizar el operador punto ‘.’ . El operador ‘->’ simplifica la escritura de programas. Como podemos ver en el siguiente ejemplo, el operador ‘->’ nos indica que el nombre del cliente está apuntado y accedido a través el puntero PCli. 1.4.4. Comparación Una variable puntero puede ser comparada con otra variable puntero o con la constante NULL; aunque todos los operadores relacionales están permitidos, sólo los operadores != y == tienen una verdadera utilidad práctica. float *PValor=NULL, Valor=50.6; float *Copia_de_PValor=NULL, Suma; Pvalor = &Valor; Copia_de_Pvalor = PValor; /* PValor devuelve su contenido, es decir 2345, que es la dirección de la variable Valor */ Suma = *Pvalor + 10; //Suma contiene 60.6 float Producto = *Pvalor * *PValor; //Contiene 50.6*50.6=2560.36 Cliente *PCli=NULL, Cli; PCli = &Cli; (*PCli).Edad = 20; cout << (*PCli).Nombre; Cliente *PCli=NULL, Cli; PCli = &Cli; PCli->Edad = 20; cout << PCli->Nombre; 2345 7350 PValor1 50.6 2345 Valor1 5678 8278 PValor2 30.2 5678 Valor2 Ejemplo 8. Representación gráfica del ejemplo
  • 6. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 6 La salida por pantalla del código del ejemplo anterior es el siguiente:  Comparación 1ª: Valor1 está situada en la memoria antes de Valor2  Comparación 2ª 30.2 es menor o igual que 50.6 La primera condición es verdadera ya que el contenido de PValor1 es menor que el contenido de PValor2 (2345 < 5678) y la segunda condición es falsa (50.6 < 30.2). 1.5. Creación de variables dinámicas. Mediante el uso de punteros se nos permite disponer de nuevas variables en tiempo de ejecución. Las variables dinámicas tienen como identificador la dirección de memoria donde están situadas. El programador tiene la responsabilidad de solicitar la creación y eliminación de variables dinámicas. En el lenguaje C++ se cuenta con el operador new para solicitar el uso de memoria dinámica. Posee la capacidad de ejecutar los constructores definidos en la clase del objeto que se instancia. Además permite traspasar valores a los parámetros definidos en los constructores de la clase. float *PValor1 = NULL, *PValor2 = NULL, Valor1 = 50.6, Valor2 = 30.2; PValor1 = &Valor1; PValor2 = &Valor2; if (PValor1<PValor2) //Comparación 1ª cout << ”Valor1 está situada en la memoria antes de Valor2”; else cout << ”Valor2 está situada en la memoria antes o en la misma posición de Valor1”; if (*PValor1 < *PValor2) //Comparación 2ª cout << *PValor2 << ” es mayor que ” << *PValor1; else cout << *PValor2 << ” es menor o igual que ” << *PValor1; 14670 7350 tabla ? ? ? ? ? 1487014868146741467214670 9854 3213 v ? 9854 //Crea una variable dinámica de tipo float float *v = new float; //Crea una tabla dinámica de 100 enteros int *tabla = new int[100]; Ejemplo 9. Ejemplos de creación de variables dinámicas y de tablas con memoria dinámica
  • 7. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 7 Todas las funciones y operadores que reservan memoria, devuelven o bien la dirección de memoria reservada o bien la constante NULL para indicar que el S.O. no ha encontrado ninguna zona de memoria con el tamaño que ha sido solicitado. 1.6. Eliminación de variables dinámicas. C++ permite la liberación de memoria dinámica con el operador delete. Posee la capacidad de ejecutar el destructor definido en la clase del objeto que se destruye. delete v; delete [] tabla; // para liberar un array creado dinámicamente con new // invoca al destructor de cada elemento del array 1.7. Aritmética de punteros. Como toda variable numérica, las variables de tipo puntero permiten realizar ciertas operaciones aritméticas sobre la dirección de memoria que almacenan. Las operaciones normales son la suma y resta de posiciones de memoria. 5373 5373 12568 C2 “Antonio” 28343334 cliente *C1 = new cliente; /*Crea un objeto cliente en memoria dinámica y ejecuta el constructor por defecto*/ cliente *C2 = new cliente(“Antonio”, 28343334); /*Crea un objeto cliente en memoria dinámica y ejecuta el constructor con dos parámetros, nombre y dni*/ Ejemplo 10. Ejemplo en C++ de creación de estructuras de datos en memoria dinámica. 14670 7350 tabla 0 1 2 98 99 1487014868146741467214670 int *tabla = new int[100]; for (int i=0; i<100; i++) tabla[i] = i; Ejemplo 11. Creación e inicialización de una tabla dinámica.
  • 8. Tema 1: Punteros y archivos Estructuras de Datos I Departamento de Tecnologías de la Información – Universidad de Huelva 8 Una vez que se agrega un valor a un puntero, puede que se produzcan resultados inesperados, efectos colaterales e incluso la pérdida de información. El estado anterior de la tabla es tal que el primer elemento de la tabla es el valor 2 y no el 0 y además el número de elementos de la tabla es de 98 elementos y no de 100. Este funcionamiento es independiente del tipo de datos de la variable puntero. La agregación de valores a una variable puntero incrementa su contenido en el mismo número de bytes que ocupa el tipo de la variable puntero. 14674 7350 tabla 0 14670 1 14672 2 14674 98 14868 99 14870 tabla++; //contiene 14672 el siguiente elemento cout << *tabla; //escribe 1 ( *tabla es igual que tabla[0]) tabla++; //contiene 14674 el tercer elemento de la tabla cout << *tabla; //escribe 2 Ejemplo 12. Ejemplo que muestra la utilización de la aritmética de punteros. cout << tabla[0]; //escribe 2 cout << tabla[-1]; //escribe 1