Apuntadores (Punteros)

Documentos relacionados
directamente indirectamente

Tema 18: Memoria dinámica y su uso en C

Tema 13: Apuntadores en C

Punteros. Programación en C 1

* Operador de Indirección ( o de referencia ) ( o de desreferencia )

Informática Ingeniería en Electrónica y Automática Industrial

FUNDAMENTOS DE PROGRAMACIÓN. PRÁCTICA 11: Apuntadores

Programación. Test Autoevaluación Tema 3

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

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

Universidad del Papaloapan

Punteros. Lenguaje C ANSI

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

PUNTEROS (APUNTADORES)

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Apuntadores y Memoria dinámica. Apuntadores. M.C. Yolanda Moyao Martínez

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

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Repaso 02: Apuntadores y manejo de memoria dinámica

PUNTEROS EN C (APUNTADORES)

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico.

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

Estructuras Dinámicas

2. APUNTADORES. Programación 2, FCFM, BUAP

Programación Estructurada. Sesión 2:El lenguaje de programación C

Tipo de Dato: Arreglos

Tema 10: Arreglos estáticos en C

PUNTEROS (Apuntadores)

Punteros y aritmética de punteros. se almacena el operando

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Apuntadores en C y C++

Lección 2 Introducción al lenguaje C

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Estructura de Datos ARREGLOS

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

FUNDAMENTOS DE PROGRAMACIÓN

Unidad I Tipos de Datos en C

Programación en Lenguaje C

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado.

Definición de estructuras. Estructuras, uniones y enumeraciones. Declaración. Definición y declaración. (struct, union y enum)

TEMA 02 TIPOS, OPERADORES Y EXPRESIONES

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Estructuras y Uniones

Funciones Tipos de funciones y Recursividad

Programación Estructurada

Tipos de datos y Operadores Básicos

Introducción al lenguaje C

OPERADORES Y EXPRESIONES

Tema 14: Arreglos estáticos en C

Introducción general al Lenguaje C (2010/2011)

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Elementos de un programa en C

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Repaso de lenguaje C. Índice. Repaso de lenguaje C. Repaso de lenguaje C: Tipos básicos

Algoritmos y estructuras de datos

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

Programación I Teoría I.

Punteros. Índice. 1. Qué es un puntero y por que son importantes.

PROGRAMACIÓN EN LENGUAJE C VARIABLES Y CONSTANTES

Guia#9: Punteros en C#.

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Laboratorio de Arquitectura de Redes. Operadores y expresiones en lenguaje C

Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Estructuración del programa en partes más pequeñas y sencillas

Al concluir está práctica el estudiante será capaz de elaborar programas utilizando apuntadores y arreglos.

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Informática PRÀCTICA 3 Curs Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida.

Introducción al lenguaje C

Lenguaje de Programación: C++ Repaso de Material C++

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

Curso de Java Introducción a la Programación II

Lenguaje de programación C. Introducción

Transcripción:

Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable que contiene el dato. Cada variable que se utiliza en una aplicación ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una dirección. 1

Operador de dirección y de indirección El Operador de Dirección ( &) regresa la dirección de una variable. El Operador de Indirección ( * ), toma la dirección de una variable y regresa el dato que contiene esa dirección. Sintaxis La declaración de un puntero de manera general es: Tipo_dato *nombre de apuntador; Tipo_dato : Especifica el tipo de objeto apuntado y puede ser cualquier tipo (int, float, char, etc). Nombre de apuntador: Es el identificador (nombre asignado) del apuntador. Ejemplos de declaración: int float *res; *ptr, cont; short *bandera; char *mensaje; 2

Representación ff107 ad81 X int 10 ptr ff107 dirección Variable de tipo entero x int x; Variable tipo apuntador a entero ptr int *ptr; Ejemplos Suponer la siguiente declaración: int a=1,b=2,*p; Si se ejecutarán cada una de las siguientes instrucciones el resultado sería: p = &a; p apunta a la variable a b = *p; ahora b es igual a 1 *p = 0; ahora a es igual a 0 3

Ejemplos // Programa que demuestra el uso basico de los apuntadores #include stdio.h #include conio.h void main ( ) { int var=1, *apun; apun = &var; // Inicialización del apuntador printf( \n Acceso directo, var= %d, var); printf( \n Acceso indirecto, var= %d, *apun); // Se despliega la dirección de la variable de dos maneras printf( \n La dirección de var= %d, &var); printf( \n LA dirección de var= %d, apun); getch( ); } Aritmética de Apuntadores Las operaciones que se pueden realizar son: Incremento (suma) apunta ++; apunta = apunta +3; Decremento (resta) apunta - -; apunta = apunta - 7; Multiplicación Comparación apunta = apunta * 2; if (apunta1 == apunta 2) if (*apunta1 == *apunta2) Asignación apunta = &variable; * apunta = 25.6 4

Aritmética de Apuntadores Ejercicio, Probar si las siguientes expresiones son verdaderas o falsas, suponiendo que: char c[11] = COMPUTACION, *p ; p= &c; La expresión c= * p++; c = * ++p; c = ++ *p; c =( *p) ++; es la misma que c = * (p++); c = *( ++p); c = ++ (*p); y es equivalente a c= *p; p++; ++p; c= *p; *p+=1; c= *p; c= *p; (*p)++; Apuntadores y vectores Las versiones con apuntadores en los arreglos son más rápidas que la forma común. La declaración int a[10]; int *pa; por lo que pa=&a[0] y así se establece que *pa=a[0] y *(pa+1)=a[1] y así sucesivamente. De esta manera se pude manejar mas eficientemente los valores y direcciones de un arreglo Bi o Unidimensional. a[n] equivale exactamente a *(a+n). Por eso empiezan los arreglos con el indice 0. El nombre del arreglo a es la dirección del primer elemento. 5

Apuntadores y Matrices Considerar: int a[10][10]; int *b[10]; El uso de a y b puede ser parecido, desde el momento en que a[5][5] y b[5][5] son referencias validas a un int. El arreglo a es un arreglo verdadero, existen 100 celdas de memoria asignadas y se efectúa el cálculo de subíndices rectangulares convencional para localizar un elemento dado. Sin embargo a b la declaración solo le asigna 10 apuntadores, cada uno de los cuales deberá de apuntar a un arreglo de enteros Diferentes declaraciones La matriz a puede declararse : Como un arreglo de 10 arreglos de tamaño 20 int a[10][20]; Como un arreglo de tamaño 20 de vectores de longitud variable int *a[10]; Como un apuntador de apuntadores a enteros int **a; Como un apuntador a un arreglo de enteros de tama~no 20 int (* a)[20]; 6

Apuntadores y cadenas Sea la declaración: char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Saludos''} ; Cada cadena está almacenada en memoria como una cadena de caracteres terminada en NULL (\0). En el arreglo no están colocadas las cadenas, tan solo están almacenados los apuntadores. Aunque el arreglo es de tamaño fijo, permite el acceso a cadenas de caracteres de cualquier longitud ( por ejemplo la longitud de Bye es mas corta que la de saludos). Ejemplo con cadenas void main() { char *esp[10] = { ''uno'', ''dos'', ''tres' }; char frances[5][10] = { ''un'',''deux'', ''trois'' }; } printf(''elemento 3 entrada 2 esp: %c \n'',esp[2][3]); printf(''elemento 4 entrada 3 frances: %c \n'',frances[3][4]); printf(''elemento 7 entrada 2 esp: %c \n'',esp[2][7]); frances[3][4]='a'; printf(''elemento 4 entrada 3 frances: %c \n'',frances[3][4]); esp[2][3]='a'; printf(''elemento 3 entrada 2 esp: %c \n'',esp[2][3]); printf( Cadena esp %s \n,esp); printf( Cadena frances %s \n,frances[1]); getch(); 7

Apuntadores a otros apuntadores Se puede tener un apuntador a otro apuntador de cualquier tipo. El siguiente código muestar este caso: void main( ) { char ch; /* Un caracter */ char *pch; /* Un apuntador a caracter */ char **ppch; /* Un apuntador a un apuntador a caracter */ ch = 'A'; pch = &ch; ppch = &pch; printf("%c\n", **ppch); /* muestra el valor de ch */ } Asignación Dinámica de Memoria La asignación dinámica permite obtener la memoria para variables que se precisen en la ejecución del programa. Para la asignación dinámica de memoria existe una función llamada malloc que se encuentra en la librería stdlib.h. void *malloc (tamaño) Donde tamaño es el tamaño en bytes de la memoria que se requiere asignar o reservar. 8

Asignación de memoria a valores tipo char Asignación de memoria a valores numéricos Si se requiere reservar memoria para un tipo de dato que no es char se realiza de la siguiente manera: tamaño = (número de elementos) * (tamaño del tipo) El tamaño del tipo se obtiene con la función sizeof. Ejemplos: //Reserva de memoria para 35 enteros int *apun; apun = (int *) malloc (sizeof(int)); //Reserva de memoria para 50 flotantes float *apun; apun = (float *) malloc (sizeof(float)); 9