[C++] Iniciación al manejo de los punteros

Iniciado por Horricreu, 10 Julio 2010, 00:04 AM

0 Miembros y 2 Visitantes están viendo este tema.

[L]ord [R]NA

Cita de: Novlucker en 16 Julio 2010, 17:49 PM
Cita de: Daemon Freedom en 10 Julio 2010, 00:22 AM... te has limitado a contar, a tu forma, lo que ya dicen todos los libros y manuales que he visto, y me imagino que la mayoría de los que no he visto ...

No obstante, conozco a varios con dolores de cabeza cuando recién comienzan con los punteros, y que lo explique así de claro alguien que recién lo entiende tiene su mérito, además de que puede resultar más sencillo para otros que comienzan al igual que él :)

Saludos

+1

.:BlackCoder:.

Muy bueno, un consejito es que pongas codigos de ejemplos, es decir ejercicios hechos, eso fue lo que mas me costo a mi, la practica  :xD... De hecho todavia creo que no la domino del todo...

Por ahi hay un post mio haciendo un ejercicio que no me salia sobre memoria dinamica y funciones... No tiene mucho sentido pero es muy bueno para ver formas de utilizar memoria dinamica... Te puede servir para hacer ejemplos, o simplemente colocarlo a manera de cultura general  :xD

Saludos... Muy buen aporte...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




Horricreu

Cita de: .:BlackCoder:. en 16 Julio 2010, 19:18 PM
Muy bueno, un consejito es que pongas codigos de ejemplos, es decir ejercicios hechos, eso fue lo que mas me costo a mi, la practica  :xD... De hecho todavia creo que no la domino del todo...

Por ahi hay un post mio haciendo un ejercicio que no me salia sobre memoria dinamica y funciones... No tiene mucho sentido pero es muy bueno para ver formas de utilizar memoria dinamica... Te puede servir para hacer ejemplos, o simplemente colocarlo a manera de cultura general  :xD

Saludos... Muy buen aporte...

Ya he publicado un ejercicio. Publicaré más si veo que tiene éxito. ¡Animaos todos!

Saludos :P

Micah Genji

excelente lo estuve revisando y esta comprensivo.
si pusieras algunos ejemplos con cadena de caracteres seria la joya :)

en fin te mando mi forma de resolverlo el ejercicio, me decis q hago mal

saludos
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former : A.E

Horricreu

#14
Cita de: Micah Genji en  1 Agosto 2010, 19:32 PM
excelente lo estuve revisando y esta comprensivo.

Gracias ;D

Cita de: Micah Genji en  1 Agosto 2010, 19:32 PM
si pusieras algunos ejemplos con cadena de caracteres seria la joya :)

Ahora pongo alguno.

Cita de: Micah Genji en  1 Agosto 2010, 19:32 PM
en fin te mando mi forma de resolverlo el ejercicio, me decis q hago mal

saludos

No sé si entendiste el ejercicio. Ahora modifico la información para que se entienda mejor pero a partir de la palabra: queso. Con esta palabra, dividiéndola, se puede mostrar la frase: eso es queso. Una vez sabes esto, haces un arreglo, penor ejemplo:

Código (cpp) [Seleccionar]
char palabra[6] = "queso";

Y un puntero al arreglo:

Código (cpp) [Seleccionar]
char *ptr = palabra;

A partir de ahí, vas aumentando la posición de memoria del puntero, para que te muestre la palabra y, puedes modificar el contenido de UN elemento. Igualmente, ahora pongo un ejemplo jugando con los arreglos de caracteres y, seguramente lo entenderás mejor.

Saludos :P

JuszR

Bueno, entendí mejor que en los e-books que tengo (y me volví loco googleando y nada). :¬¬

Ahora, hay algo que no entiendo bien. ¿Para qué sirven realmente los pointers?? ¿qué gano teniendo la dirección en memoria de X?
Cuando ejecuto mi programa, si necesito más memoria supongo que el sistema lo hace solo, no necesito reservar memoria.
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

Horricreu

#16
Cita de: Leo.Jr90 en  6 Septiembre 2010, 23:17 PM
Bueno, entendí mejor que en los e-books que tengo (y me volví loco googleando y nada). :¬¬

Ahora, hay algo que no entiendo bien. ¿Para qué sirven realmente los pointers?? ¿qué gano teniendo la dirección en memoria de X?
Cuando ejecuto mi programa, si necesito más memoria supongo que el sistema lo hace solo, no necesito reservar memoria.

CitarC was developed when computers were much less powerful than they are today and being very efficient with speed and memory usage was often not just desirable but vital. The raw ability to work with particular memory locations was obviously a useful option to have. A few tasks these days, such as programming microcontrollers, still need this. However most modern programmers do not need such fine control and the complications of using pointers make programs less clear to understand and add to the ways in which they can be go wrong. So why are pointers still used so much in C & its successor, C++?

The reason is that pointers are used to bodge into C some vital features which are missing from the original language: arrays, strings, & writeable function parameters. They can also be used to optimize a program to run faster or use less memory that it would otherwise.

One of the complications when reading C programs is that a pointer could be being used for any, several or all of these different reasons with little or no distinction in the language so, unless the programmer has put in helpful comments, one has to follow through the program to see what each pointer is used for in order to work out why it is there instead of a plain simple variable.

Con los punteros eres el amo y señor de una dirección de memoria. Puedes hacer lo que te dé la gana... ahí juega la imaginación ;D

Saludos :P

JuszR

¿Cómo qué? dame un ejemplo real.

Cita de: Horricreu en  6 Septiembre 2010, 23:37 PM
microcontrollers, still need this. However most modern programmers do not need such fine control and the complications of using pointers make programs less clear to understand and add to the ways in which they can be go wrong. So why are pointers still used so much in C & its successor, C++?

The reason is that pointers are used to bodge into C some vital features which are missing from the original language: arrays, strings, & writeable function parameters. They can also be used to optimize a program to run faster or use less memory that it would otherwise.
Según eso no los necesito. No pienso programar microcontroladores, y según tengo entendido, C++ tiene eso que le 'falta' a C.
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

Horricreu

Cita de: Leo.Jr90 en  7 Septiembre 2010, 22:54 PM
¿Cómo qué? dame un ejemplo real.

Si aprendes programación, no sé lo que quieres hacer. Hay montones de ejemplos...

Cita de: Leo.Jr90 en  7 Septiembre 2010, 22:54 PM
Cita de: Horricreu en  6 Septiembre 2010, 23:37 PM
microcontrollers, still need this. However most modern programmers do not need such fine control and the complications of using pointers make programs less clear to understand and add to the ways in which they can be go wrong. So why are pointers still used so much in C & its successor, C++?

The reason is that pointers are used to bodge into C some vital features which are missing from the original language: arrays, strings, & writeable function parameters. They can also be used to optimize a program to run faster or use less memory that it would otherwise.
Según eso no los necesito. No pienso programar microcontroladores, y según tengo entendido, C++ tiene eso que le 'falta' a C.

Claro, C++ se puede orientar a objetos.

Saludos :P

anonimo12121

Horricreu vi este post hace tiempo pero estaba dejado de programar ahora lo retornado serio, y lo e leído y e hecho lo siguiente.
Correjirme por favor

#include <iostream>
using namespace std;
int main(int argc,char *argv[]){
    int a =1;
    int v[]={12,13,14,15};
    int *p=NULL;
    int *p1=new int[4];
    p=&a;
    cout << " => Welcome\n";
    cout << &a << " => a = " << a << "\n";
    cout << p << " => *p = " << *p << "\n";
    *p=2;
    cout << &a << " => a = " << a << "\n";
    cout << p << " => *p = " << *p << "\n";
    p=v;
    cout << p << " => *p = " << *p << "\n";
    p++;
    cout << p << " => *p = " << *p << "\n";
    p++;
    cout << p << " => *p = " << *p << "\n";
    p++;
    cout << p << " => *p = " << *p << "\n";
    p++;
    for(int i=0;i<=4;i++)p1[i]=v[i]; //no esta apuntando a la dirección de v[x] si no que se le añade el valor reservado a la memoria
    cout << &p1[0] << " => *p1 = " << p1[0] << "\n";
    cout << &p1[1] << " => *p1 = " << p1[1] << "\n";
    cout << &p1[2] << " => *p1 = " << p1[2] << "\n";
    cout << &p1[3] << " => *p1 = " << p1[3] << "\n";
    cin.get();
    delete[] p1;
}
/*
Para crear un puntero se le asigna el valor NULL asi "int *p =NULL";
int *p al poner "*" hace que sea puntero la variable.
para que el puntero tenga una dirección "p=&variable.
para usar valor de la dirección del punter "*p".
para ver la dirección de memoria del puntero "p".
para ver la dirección de memoria de una variable int normal &variable.
tambien se puede hacer para reservar un espacio y que el puntero apunte algo de la siguiente manera "int *p= new int;
con el operador "new" reservamos memoria dinamica es obligatorio eliminar la memoria reservada "delente p;"
Arreglos dinamicos int p=new int[5]; delete[] int;
*/
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746