SlideShare une entreprise Scribd logo
1  sur  20
¿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 hay que confundir una dirección de memoria con el contenido de esa dirección de memoria. int x = 25; Dirección  1502  1504  1506  1508  La  dirección  de la variable x (&x) es 1502 El  contenido  de la variable x es 25  ... ... ... ... 25 ... ...
Las  direcciones de memoria  dependen de la arquitectura del ordenador y de la gestión que  el sistema operativo  haga de ella. En lenguaje  ensamblador  se debe indicar numéricamente la posición física de memoria en que queremos almacenar un dato. De ahí que este lenguaje dependa tanto de la máquina en la que se aplique. En  C  no debemos,  ni podemos , indicar numéricamente la dirección de memoria, si no que utilizamos una etiqueta que conocemos como  variable . Lo que nos interesa es almacenar un dato, y no la localización exacta de ese dato en memoria.
Una variable puntero se declara como todas las variables. Debe ser del mismo tipo que la variable apuntada. Su identificador va precedido de un asterisco (*): int *punt; Es una variable puntero que apunta a variable que contiene un dato de tipo entero llamada punt. char *car: Es un puntero a variable de tipo carácter. long float *num; float *mat[5];  // . . . Un puntero tiene su  propia dirección  de memoria:  &punt &car
Es decir: hay  tantos  tipos  de  punteros  como  tipos de datos,  aunque  también  pueden  declararse  punteros  a estructuras más complejas (funciones, struct, ficheros...) e incluso punteros vacíos (void ) y punteros nulos (NULL). Declaración de variables puntero: Sea un fragmento de programa en C: char dato;  //variable que almacenará un carácter. char *punt;  //declaración de puntero a carácter. punt = &dato;  //en la variable punt  guardamos la dirección   //  de memoria  de la variable dato; punt apunta   // a dato .  Ambas son del mismo tipo,  char.
int *punt = NULL, var = 14; punt = &var; printf(“%#X,  %#X”, punt, &var)  //la misma salida: dirección printf(“%d,  %d”, *punt, var);  //salida:  14,  14 Hay que tener cuidado con las direcciones apuntadas: printf(“%d,  %d”, *(punt+1), var+1); *(punt + 1)  repesenta el valor contenida en la dirección de memoria aumentada en una posición (int=2bytes), que será un valor no deseado. Sin embargo  var+1  representa el valor 15. punt + 1  representa lo mismo que  &var + 1  (avance en la dirección de memoria de var).
Al trabajar con punteros se emplean dos operadores específicos:     Operador de  dirección :  &  Representa la dirección de memoria de la variable que le sigue: &fnum  representa la dirección de fnum.      Operador de  contenido o  indirección :  * El operador  *  aplicado  al nombre de un puntero indica  el  valor de la variable apuntada: float  altura = 26.92,  *apunta; apunta = &altura; //inicialización del puntero
float  altura = 26.92, *apunta; apunta = &altura; //inicialización del puntero .printf(“%f”, altura);  //salida 26.92 .printf(“%f”, *apunta); No se debe confundir el operador  *  en la declaración del puntero: int  * p; Con el operador   *   en las instrucciones:  .  * p = 27;  printf(“Contenido = %d”, *p);
Veamos con otro ejemplo en C la diferencia entre todos estos conceptos  void main(void) { int a, b, c, *p1, *p2; void *p; p1 = &a;  // Paso 1. La dirección de a es asignada a p1 *p1 = 1;  // Paso 2. p1 (a) es igual a 1. Equivale a a = 1; p2 = &b;  // Paso 3. La dirección de b es asignada a p2 *p2 = 2;  // Paso 4. p2 (b) es igual a 2. Equivale a b = 2; p1 = p2;  // Paso 5. El valor del p1 = p2 *p1 = 0;  // Paso 6. b = 0
p2 = &c;  // Paso 7. La dirección de c es asignada a p2 *p2 = 3;  // Paso 8. c = 3 printf("%d %d %d", a, b, c);  // Paso 9. ¿Qué se imprime? p = &p1;  // Paso 10. p contiene la dirección de p1 *p = p2;  // Paso 11. p1= p2; *p1 = 1;  // Paso 12. c = 1 printf("%d %d %d", a, b, c);  // Paso 13. ¿Qué se imprime?  }
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],< Almacenamiento > < Tipo >   *  < Nombre > = < Expresión >
Inicialización de punteros(II): 2) El nombre de un array de almacenamiento static o extern se transforma según la expresión: a)  float mat[12]; float *punt = mat; b) float mat[12]; float *punt = &mat[0];  3) Un “cast”  puntero a puntero: int *punt = (int *) 123.456; Inicializa el puntero con el entero.
Inicialización de punteros(III): 4) Un puntero a carácter puede inicializarse en la forma: char *cadena = Esto es una cadena”;   5) Se pueden sumar o restar valores enteros a las direcciones de memoria en la forma: (aritmética de punteros) static int x; int *punt = &x+2, *p = &x-1; 6) Equivalencia: Dos tipos definidos como punteros a objeto P y puntero a objeto Q son  equivalentes  sólo si P y Q son del  mismo tipo.  Aplicado a matrices: nombre_puntero = nombre_matriz;
PUNTEROS Y ARRAYS Sea el array de una dimensión: int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3}; en el que cada elemento, por ser tipo int, ocupa dos bytes de memoria. Suponemos que la dirección de memoria del primer elemento, es 1500: &mat[0] es 1500 &mat[1] será 1502 &mat[7] será  1514
PUNTEROS Y ARRAYS int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3}; En total los 8 elementos ocupan 16 bytes. Podemos representar las direcciones de memoria que ocupan los elementos del array , los datos que contiene y las posiciones del array en la forma:  Dirección  1502  1504  1506  1508  1510  1512  1514 Elemento  mat[1]  mat[2]  mat[3]  mat[4]  mat[5]  mat[6]  mat[7] 3 0 12 234 29 -4 16 2
Dirección  1502  1504  1506  1508  1510  1512  1514 El acceso podemos hacerlo mediante el índice: x = mat[3]+mat[5];  // x = 29 + 12  para sumar los elementos de la cuarta y sexta posiciones. Como hemos dicho que podemos acceder por posición y por dirección: ¿Es lo mismo &mat[0] y mat? Y &mat[1] = mat++ ? Veamos el código de un ejemplo: Elemento  mat[1]  mat[2]  mat[3]  mat[4]  mat[5]  mat[6]  mat[7] 16 3 0 12 234 29 -4 2
#include <stdio.h> #include <conio.h> int mat[5]={ 2, 16, -4, 29, 234, 12, 0, 3 }, i;  //declaradas como globales void main()   { printf(&quot;%d&quot;, &mat[0]);   //resultado: 1500 (dirección de mem) printf(&quot;% p &quot;, mat);  //resultado: 1500 ( &quot;  &quot;  &quot;  &quot;  &quot;  ) i++;  //i=1 printf(&quot;% p &quot;, mat+i);  //resultado: 1502 ( &quot;  &quot;  &quot;  &quot;  &quot;  ) printf(&quot;%d&quot;, *(mat+i));   //resultado: 1 6  (valor de mat[1] o valor getch();  }     //en la dirección 1502
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Aplicando los puntos anteriores, podemos decir que  char * ( * ( *var ) (   ) ) [10] 7  6  4  2 1  3  5   La interpretación es: 1.  La variable var es declarada como 2.  un puntero a 3.  una función que devuelve 4.  un puntero a 5 . un array de 10 elementos, los cuales son  6.  punteros a  7.  objetos de tipo char.
Fundamentos de Programación ESPE

Contenu connexe

Tendances (20)

Pointer in c
Pointer in cPointer in c
Pointer in c
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
2 punteros y lenguaje c
2 punteros y lenguaje c2 punteros y lenguaje c
2 punteros y lenguaje c
 
Teoria de listas
Teoria de listasTeoria de listas
Teoria de listas
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Listas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPListas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UP
 
Recursive functions in C
Recursive functions in CRecursive functions in C
Recursive functions in C
 
358 33 powerpoint-slides_2-functions_chapter-2
358 33 powerpoint-slides_2-functions_chapter-2358 33 powerpoint-slides_2-functions_chapter-2
358 33 powerpoint-slides_2-functions_chapter-2
 
358 33 powerpoint-slides_8-linked-lists_chapter-8
358 33 powerpoint-slides_8-linked-lists_chapter-8358 33 powerpoint-slides_8-linked-lists_chapter-8
358 33 powerpoint-slides_8-linked-lists_chapter-8
 
Practica2 postgresql
Practica2 postgresqlPractica2 postgresql
Practica2 postgresql
 
Linked list
Linked listLinked list
Linked list
 
Graph.pptx
Graph.pptxGraph.pptx
Graph.pptx
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9
 
Pointers in c - Mohammad Salman
Pointers in c - Mohammad SalmanPointers in c - Mohammad Salman
Pointers in c - Mohammad Salman
 
Pointers in c++ by minal
Pointers in c++ by minalPointers in c++ by minal
Pointers in c++ by minal
 
Constructor and encapsulation in php
Constructor and encapsulation in phpConstructor and encapsulation in php
Constructor and encapsulation in php
 
C pointer basics
C pointer basicsC pointer basics
C pointer basics
 
Python Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, ExceptionsPython Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, Exceptions
 

Similaire à Punteros

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
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4hassanbadredun
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programaciondiego MC
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3louis
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punterosManuel
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivastacubomx
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punterosKareliaRivas
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1joeshego
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje cjoeshego
 

Similaire à Punteros (20)

Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punteros
 
Tipos de datos en C
Tipos de datos en CTipos de datos en C
Tipos de datos en C
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Apunfun1
Apunfun1Apunfun1
Apunfun1
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
Solucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectoresSolucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectores
 
1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios
 
C sharp intro0
C sharp intro0C sharp intro0
C sharp intro0
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punteros
 
Teoria punteros
Teoria punterosTeoria punteros
Teoria punteros
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
 

Plus de JJ (John John) 4601 (20)

Consentimiento inf. Usach
Consentimiento inf.   UsachConsentimiento inf.   Usach
Consentimiento inf. Usach
 
Consntimiento informado -1
Consntimiento informado -1Consntimiento informado -1
Consntimiento informado -1
 
Excelencia académica tec monterrey cambridge
Excelencia académica tec monterrey cambridgeExcelencia académica tec monterrey cambridge
Excelencia académica tec monterrey cambridge
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Información
InformaciónInformación
Información
 
presentación
presentación presentación
presentación
 
Boletín estadístico no 04 2014 ventas vehículos importados comercio 2013
Boletín estadístico no 04 2014 ventas vehículos importados comercio 2013Boletín estadístico no 04 2014 ventas vehículos importados comercio 2013
Boletín estadístico no 04 2014 ventas vehículos importados comercio 2013
 
Estadística
EstadísticaEstadística
Estadística
 
Sistemas Operativos Software
Sistemas Operativos SoftwareSistemas Operativos Software
Sistemas Operativos Software
 
Introducción Computación
Introducción ComputaciónIntroducción Computación
Introducción Computación
 
Placa base
Placa basePlaca base
Placa base
 
Presentación
PresentaciónPresentación
Presentación
 
Ap1 ap2 nom_g6
Ap1 ap2 nom_g6Ap1 ap2 nom_g6
Ap1 ap2 nom_g6
 
Declaración de punteros
Declaración de punterosDeclaración de punteros
Declaración de punteros
 
Funciones
FuncionesFunciones
Funciones
 
Introducción FundamProgramación
Introducción FundamProgramaciónIntroducción FundamProgramación
Introducción FundamProgramación
 
Libro compartido para trabajar en colaboración
Libro compartido para trabajar en colaboraciónLibro compartido para trabajar en colaboración
Libro compartido para trabajar en colaboración
 
Teoria De Grafos
Teoria De GrafosTeoria De Grafos
Teoria De Grafos
 
Docentes, Por: JJ
Docentes, Por: JJDocentes, Por: JJ
Docentes, Por: JJ
 

Dernier

Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
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
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
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
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
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
 
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
 
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
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
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í
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
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
 

Dernier (20)

Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
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...
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
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...
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
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
 
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
 
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
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
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 clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 

Punteros

  • 1.
  • 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 de otra variable. No hay que confundir una dirección de memoria con el contenido de esa dirección de memoria. int x = 25; Dirección 1502 1504 1506 1508 La dirección de la variable x (&x) es 1502 El contenido de la variable x es 25 ... ... ... ... 25 ... ...
  • 3. Las direcciones de memoria dependen de la arquitectura del ordenador y de la gestión que el sistema operativo haga de ella. En lenguaje ensamblador se debe indicar numéricamente la posición física de memoria en que queremos almacenar un dato. De ahí que este lenguaje dependa tanto de la máquina en la que se aplique. En C no debemos, ni podemos , indicar numéricamente la dirección de memoria, si no que utilizamos una etiqueta que conocemos como variable . Lo que nos interesa es almacenar un dato, y no la localización exacta de ese dato en memoria.
  • 4. Una variable puntero se declara como todas las variables. Debe ser del mismo tipo que la variable apuntada. Su identificador va precedido de un asterisco (*): int *punt; Es una variable puntero que apunta a variable que contiene un dato de tipo entero llamada punt. char *car: Es un puntero a variable de tipo carácter. long float *num; float *mat[5]; // . . . Un puntero tiene su propia dirección de memoria: &punt &car
  • 5. Es decir: hay tantos tipos de punteros como tipos de datos, aunque también pueden declararse punteros a estructuras más complejas (funciones, struct, ficheros...) e incluso punteros vacíos (void ) y punteros nulos (NULL). Declaración de variables puntero: Sea un fragmento de programa en C: char dato; //variable que almacenará un carácter. char *punt; //declaración de puntero a carácter. punt = &dato; //en la variable punt guardamos la dirección // de memoria de la variable dato; punt apunta // a dato . Ambas son del mismo tipo, char.
  • 6. int *punt = NULL, var = 14; punt = &var; printf(“%#X, %#X”, punt, &var) //la misma salida: dirección printf(“%d, %d”, *punt, var); //salida: 14, 14 Hay que tener cuidado con las direcciones apuntadas: printf(“%d, %d”, *(punt+1), var+1); *(punt + 1) repesenta el valor contenida en la dirección de memoria aumentada en una posición (int=2bytes), que será un valor no deseado. Sin embargo var+1 representa el valor 15. punt + 1 representa lo mismo que &var + 1 (avance en la dirección de memoria de var).
  • 7. Al trabajar con punteros se emplean dos operadores específicos:  Operador de dirección : & Representa la dirección de memoria de la variable que le sigue: &fnum representa la dirección de fnum.  Operador de contenido o indirección : * El operador * aplicado al nombre de un puntero indica el valor de la variable apuntada: float altura = 26.92, *apunta; apunta = &altura; //inicialización del puntero
  • 8. float altura = 26.92, *apunta; apunta = &altura; //inicialización del puntero .printf(“%f”, altura); //salida 26.92 .printf(“%f”, *apunta); No se debe confundir el operador * en la declaración del puntero: int * p; Con el operador * en las instrucciones: . * p = 27; printf(“Contenido = %d”, *p);
  • 9. Veamos con otro ejemplo en C la diferencia entre todos estos conceptos void main(void) { int a, b, c, *p1, *p2; void *p; p1 = &a; // Paso 1. La dirección de a es asignada a p1 *p1 = 1; // Paso 2. p1 (a) es igual a 1. Equivale a a = 1; p2 = &b; // Paso 3. La dirección de b es asignada a p2 *p2 = 2; // Paso 4. p2 (b) es igual a 2. Equivale a b = 2; p1 = p2; // Paso 5. El valor del p1 = p2 *p1 = 0; // Paso 6. b = 0
  • 10. p2 = &c; // Paso 7. La dirección de c es asignada a p2 *p2 = 3; // Paso 8. c = 3 printf(&quot;%d %d %d&quot;, a, b, c); // Paso 9. ¿Qué se imprime? p = &p1; // Paso 10. p contiene la dirección de p1 *p = p2; // Paso 11. p1= p2; *p1 = 1; // Paso 12. c = 1 printf(&quot;%d %d %d&quot;, a, b, c); // Paso 13. ¿Qué se imprime? }
  • 11.
  • 12. Inicialización de punteros(II): 2) El nombre de un array de almacenamiento static o extern se transforma según la expresión: a) float mat[12]; float *punt = mat; b) float mat[12]; float *punt = &mat[0]; 3) Un “cast” puntero a puntero: int *punt = (int *) 123.456; Inicializa el puntero con el entero.
  • 13. Inicialización de punteros(III): 4) Un puntero a carácter puede inicializarse en la forma: char *cadena = Esto es una cadena”; 5) Se pueden sumar o restar valores enteros a las direcciones de memoria en la forma: (aritmética de punteros) static int x; int *punt = &x+2, *p = &x-1; 6) Equivalencia: Dos tipos definidos como punteros a objeto P y puntero a objeto Q son equivalentes sólo si P y Q son del mismo tipo. Aplicado a matrices: nombre_puntero = nombre_matriz;
  • 14. PUNTEROS Y ARRAYS Sea el array de una dimensión: int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3}; en el que cada elemento, por ser tipo int, ocupa dos bytes de memoria. Suponemos que la dirección de memoria del primer elemento, es 1500: &mat[0] es 1500 &mat[1] será 1502 &mat[7] será 1514
  • 15. PUNTEROS Y ARRAYS int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3}; En total los 8 elementos ocupan 16 bytes. Podemos representar las direcciones de memoria que ocupan los elementos del array , los datos que contiene y las posiciones del array en la forma: Dirección 1502 1504 1506 1508 1510 1512 1514 Elemento mat[1] mat[2] mat[3] mat[4] mat[5] mat[6] mat[7] 3 0 12 234 29 -4 16 2
  • 16. Dirección 1502 1504 1506 1508 1510 1512 1514 El acceso podemos hacerlo mediante el índice: x = mat[3]+mat[5]; // x = 29 + 12 para sumar los elementos de la cuarta y sexta posiciones. Como hemos dicho que podemos acceder por posición y por dirección: ¿Es lo mismo &mat[0] y mat? Y &mat[1] = mat++ ? Veamos el código de un ejemplo: Elemento mat[1] mat[2] mat[3] mat[4] mat[5] mat[6] mat[7] 16 3 0 12 234 29 -4 2
  • 17. #include <stdio.h> #include <conio.h> int mat[5]={ 2, 16, -4, 29, 234, 12, 0, 3 }, i; //declaradas como globales void main() { printf(&quot;%d&quot;, &mat[0]); //resultado: 1500 (dirección de mem) printf(&quot;% p &quot;, mat); //resultado: 1500 ( &quot; &quot; &quot; &quot; &quot; ) i++; //i=1 printf(&quot;% p &quot;, mat+i); //resultado: 1502 ( &quot; &quot; &quot; &quot; &quot; ) printf(&quot;%d&quot;, *(mat+i)); //resultado: 1 6 (valor de mat[1] o valor getch(); } //en la dirección 1502
  • 18.
  • 19. Aplicando los puntos anteriores, podemos decir que char * ( * ( *var ) ( ) ) [10] 7 6 4 2 1 3 5 La interpretación es: 1. La variable var es declarada como 2. un puntero a 3. una función que devuelve 4. un puntero a 5 . un array de 10 elementos, los cuales son 6. punteros a 7. objetos de tipo char.

Notes de l'éditeur

  1. ytuytudeytu
  2. ytuytudeytu
  3. ytuytudeytu
  4. ytuytudeytu
  5. ytuytudeytu
  6. ytuytudeytu
  7. ytuytudeytu
  8. ytuytudeytu
  9. ytuytudeytu
  10. ytuytudeytu
  11. ytuytudeytu
  12. ytuytudeytu
  13. ytuytudeytu
  14. ytuytudeytu
  15. ytuytudeytu
  16. ytuytudeytu
  17. ytuytudeytu
  18. ytuytudeytu
  19. ytuytudeytu