• Ir al contenido
  • Ir a la navegación
  • Ir al buscador
 
Portada Boludo
ING English
Directorio WAP para móvil, Tablet, iPhone o Smartphone

Centro de Noticias de la Universidad de Oriente

Categorías

 

Inicio  |  Contacto  |  Posts  |  TIENDA PUBLISHOP  |  Sobre nosotros  |  Registro y Planes  |  Pagos  |  Donaciones

Ver Código QR de esta página

Campaña #AyudemosaYuli  |  Campaña #AyudemosaStephany.  |  ¿Interesado(a) en cursos y resolución de ejercicios de materias prácticas? Para más información, contáctenos por: Teléfono: +58 (412) - 8226575. WhatsApp y Telegram: +58 (426) - 6836955 o escriba al correo: [email protected]. Únete al grupo: SISTEMAS (UDOMO).

[»] **Musica para tu celular

WEB TRANSLATOR

LINK for English Language

Use this link for translate into English


+ Buscar en BolUDO

 

Los punteros en C++

Tweet
 

lunes julio 11, 2016

Los punteros son variables que almacenan direcciones de memoria de otra variable.

El concepto de punteros es bastante complejo en un principio y puede llevar a pensar que no tienen una gran utilidad, muy lejos está la realidad.

El manejo de punteros es fundamental para conceptos futuros como la creación y liberación de objetos en tiempo de ejecución de un programa.

Hemos visto las estructuras de datos tipo vector y matrices, pero hay otro tipo de estructuras llamadas estructuras dinámicas que requieren obligatoriamente el empleo de punteros y resuelven otro conjunto de problemas que las estructuras estáticas no pueden.

Un puntero se definen de la siguiente manera:

    <tipo de dato al que apunta> * <nombre del puntero>;

Punteros a tipo de dato numérico

Definición de un puntero que apunta a un entero:

    int *pe;

Asignación de contenido a un puntero:

    int x=9;
    pe=&x;

Un puntero contiene una dirección, aquí le asignamos la dirección de la variable entera x, por eso debemos anteceder el símbolo &.

Podemos asignar un valor a lo apuntado por el puntero:
    int x=9;
    pe=&x;
    *pe=5;  // la variable x almacena 5
    cout <<x; //5

Aquí le asignamos el valor 5 a la dirección a la cual apunta el puntero pe, es decir, a la variable entera x. Para indicar que el valor 5 es asignado a donde apunta el puntero pe, antecedemos al nombre del puntero el símbolo *.

Impresión:

No se puede imprimir el contenido de un puntero, que es una dirección de memoria, lo que imprimimos es el contenido de la variable a la cual apunta el puntero:

    int x=9;
    pe=&x;
    cout <<*pe;	// imprime 9

Problema 1:

Confeccionar un programa que defina dos punteros a tipos de datos int y float. Acceder mediante estos punteros a otras variables de tipo int y float.

Programa:

#include <iostream>

using namespace std;

void main()
{
    int x = 10;
    int *pe;
    pe = &x;
    cout << x;         // 10
    cout << "";
    cout << *pe;       // imprime lo apuntado por pe: 10
    cout << "";
    *pe = 5;           //asignamos 5 a lo apuntado por pe
    cout << x;         // 5
    cout << "";
    float valor = 10.9;
    float *pf;
    pf = &valor;
    cout << *pf;      //imprimime lo apuntado por pf: 10.9
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

Puntero1.zip

Vamos a hacer el seguimiento del programa anterior suponiendo que somos el sistema operativo asignando espacios en la memoria ram para

localizar las variables de memoria:

Definimos la variable x (el sistema operativo le reserva espacio en la dirección de memoria 1000 y almacena en ese espacio el valor 10):

int x=10;             Dir. de Mem.    Contenido    Nombre de variable
                         1000           10             x

Definimos otra variable pero en este caso de tipo puntero a entero y se le asigna el espacio de memoria 1004 (por el momento no guardamos nada en esta variable):

int *pe;             Dir. de Mem.    Contenido    Nombre de variable
                         1000           10             x
                         1004                          pe

Inicializamos el puntero pe con la dirección de la variable x:

pe=&x;               Dir. de Mem.    Contenido    Nombre de variable
                         1000           10             x
                         1004         1000             pe

Modificamos el espacio apuntado por la variable pe (es decir a partir de la dirección 1000 almacenamos el valor 5):

*pe=5;               Dir. de Mem.    Contenido    Nombre de variable
                         1000            5             x
                         1004         1000             pe

Ahora hacemos algo similar para trabajar con una variable float y un puntero a un tipo de dato float. Definimos una variable float:

float valor=10.9;    Dir. de Mem.    Contenido    Nombre de variable
                        1000            5             x
                        1004         1000             pe
                        1008         10.9             valor

Definimos un puntero a tipo de dato float:

float *pf;           Dir. de Mem.    Contenido    Nombre de variable
                        1000            5            x
                        1004            1000         pe
                        1008            10.9         valor
                        1012                         pf

Recuperamos la dirección de la variable float:

pf=&valor;          Dir. de Mem.    Contenido    Nombre de variable
                        1000            5            x
                        1004            1000         pe
                        1008            10.9         valor
                        1012            1008         pf
  1. Hacer el gráfico de la memoria e indicar que se imprime en pantalla al ejecutar este programa:
    #include<iostream>
    
    using namespace std;
    
    void main()
    {
        int x1 = 50;
        int x2 = 100;
        int *pun1, *pun2;
        pun1 = &x1;
        pun2 = pun1;
        *pun1 = 2000;
        cout << x1;
        cout << "";
        cout << x2;
        cout << "";
        cout << *pun1;
        cout << "";
        cout << *pun2;
        cout << "";
        pun2 = &x2;
        x1 = 1;
        x2 = 2;
        cout << *pun1;
        cout << "";
        cout << *pun2;
        cout << "";
        *pun1 = 500;
        *pun2 = 600;
        cout << x1;
        cout << "";
        cout << x2;
        cin.get();
    }
    
  2. Definir tres variables enteras e inicializarlas con los valores 5,10 y 15. Luego definir una variable puntero a entero. Hacer que dicha variable apunte sucesivamente a las distintas variables definidas previamente e imprimir su contenido.
  3. Definir dos variables float y un puntero a un tipo de dato float. Hacer que el puntero guarde sucesivamente las direcciones de la primera y segunda variable y cambiar el contenido de las mismas por asignación. Imprimir las dos variables de tipo float.
Solución
int x1=50;             
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000           50             x1
int x2=100;                          
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000           50             x1
                          1004          100             x2
int *pun1,*pun2;
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000           50             x1
                          1004          100             x2
                          1008                          pun1
                          1012                          pun2
 pun1 = &x1;                          
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000           50             x1
                          1004          100             x2
                          1008         1000             pun1
                          1012                          pun2
pun2 = pun1;
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000           50             x1
                          1004          100             x2
                          1008         1000             pun1
                          1012         1000             pun2
*pun1 = 2000;
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000         2000             x1
                          1004          100             x2
                          1008         1000             pun1
                          1012         1000             pun2
 pun2 = &x2;
                      Dir. de Mem.    Contenido    Nombre de variable
                          1000         2000             x1
                          1004          100             x2
                          1008         1000             pun1
                          1012         1004             pun2
 x1 = 1;
                       Dir. de Mem.    Contenido    Nombre de variable
                          1000            1             x1
                          1004          100             x2
                          1008         1000             pun1
                          1012         1004             pun2
x2 = 2;
                       Dir. de Mem.    Contenido    Nombre de variable
                          1000            1             x1
                          1004            2             x2
                          1008         1000             pun1
                          1012         1004             pun2
*pun1 = 500;
                       Dir. de Mem.    Contenido    Nombre de variable
                          1000          500             x1
                          1004            2             x2
                          1008         1000             pun1
                          1012         1004             pun2
*pun2 = 600;
                       Dir. de Mem.    Contenido    Nombre de variable
                          1000          500             x1
                          1004          600             x2
                          1008         1000             pun1
                          1012         1004             pun2

Este proyecto lo puede descargar en un zip desde este enlace :Puntero2.zip

#include<iostream> using namespace std; void main() { int x1 = 5; int x2 = 10; int x3 = 15; int *pe; pe = &x1; cout << *pe; cout << ""; pe = &x2; cout << *pe; cout << ""; pe = &x3; cout << *pe; cin.get(); }

Este proyecto lo puede descargar en un zip desde este enlace :Puntero3.zip

#include<iostream> using namespace std; void main() { float f1, f2; float *pf; pf = &f1; *pf = 10.5; pf = &f2; *pf = 20.2; cout << f1; cout << ""; cout << f2; cin.get(); }

Este proyecto lo puede descargar en un zip desde este enlace :Puntero4.zip


— @bolUDOoficial

— Síguenos en Twitter@bolUDOoficial

Categorías: #C++, #


[0] Atrás | Directorio
« Inicio
Apps Infoudo
Apps Infoudo ¡Descarga el icono directo en el menú de tu equipo!
[»] Las mejores Apps para tu celular
[»] Imágenes Gratis


Comenta o lee lo que otros opinan

COMPÁRTELO:

Indica que te gusta y comparte

Me Gusta :)Facebook Tuiteame :)Twitter .WhatsApp .Telegram . LinkedIn

También te puede interesar:

NOCIONES BÁSICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Material de Apoyo del Curso de Programación - Lenguaje C++ - Periodo (Feb - May) del año en curso
Parámetros por valor y por referencia de objetos
Parámetros por valor y por referencia de datos simples
Métodos constantes (const)
Parámetros de un método constante (const)
Definición de constantes (const)
Directiva #define
Puntero this
Métodos estáticos de una clase


« Herencia en C++  |  Parámetros de métodos de tipo puntero »
 
Apps Infoudo
 
Buscador:
Powered by Google:


Web móvil
Imágenes
La Web

 

Síguenos por RSS


Puedes leerlos mediante el navegador Firefox, lectores de noticias en la computadora o el móvil o usando el servicio de Feedburner de Google para recibir las notificaciones por correo electrónico.
RSS - Suscribirse usando Feedburner de Google

email Recibir las nuevas publicaciones de Boludo por email

Atom


»Ir a URL
.....
Registra Gratis Tu Negocio
....
Sugerir un nuevo sitio WAP

...
¡Bloguea Ya!

..
Registro de Profesionales(Abogados, escritores, doctores, licenciados, ingenieros, etc.)
.
Soporte

Síguenos en las redes sociales

Síguenos en Facebook facebook.com/boludooficial Síguenos en Twitter @bolUDOoficial Síguenos en Instagram @boludooficial Síguenos en Telegram t.me/Boludooficial
Síguenos en WhatsApp BolUDOoficial Síguenos en YouTube youtube.com/channel/UCJDooTJmROzAkBcbRrryvGA
Síguenos en Facebook facebook.com/SergioAlemanFans Síguenos en Twitter @SergioAleman1 Síguenos en Instagram @sergioalemanfans
Síguenos en WhatsApp wa.me/qr/Y7Q232VLZPR5O1 Síguenos en Tiktok @sergioalemanoficial Síguenos en Tiktok @sergioalemanfans
Síguenos en Telegram t.me/SergioAlemanOficial Síguenos en YouTube youtube.com/channel/UCqcLSYCKx9pamla68nFMDkw
Síguenos en Facebook facebook.com/INFOUDO.OFICIAL Síguenos en Twitter @infoudomon Síguenos en Instagram @infoudooficial Síguenos en Telegram t.me/Infoudooficial
Síguenos en Facebook facebook.com/tuinfou Síguenos en Twitter @infoudomonagas
Síguenos en WhatsApp INFO UDO Síguenos en YouTube youtube.com/channel/UCuicPxpqv3C0p1qwaO1XSSQ

Mis cuentas sociales

FB
Twitter
Pinterest
Instagram
Otras

Móvil: (0426 683 6955) - E-mail: [email protected] - [email protected] - WhatsApp: +58 (0426) 683.69.55


Copyscape
Volver arriba

Protocolo  |  Mapa del Sitio  |  Report Abuse - DMCA  |  Términos y Condiciones  |  Ayuda  |  Privacidad de Datos  |  Política de Cookies  |  Reportar un bug  |  Licencia: CC BY-NC-ND 3.0

Copyright ©2023 Boludo. Todos los derechos reservados. Diseñado y Desarrollado por Sergio Alemán Mi perfil en GitHub


SUBIR