Raised This Month: $51 Target: $400
 12% 

Punteros en c++


  
 
 
Thread Tools Display Modes
Author Message
Stereo
Veteran Member
Join Date: Dec 2010
Old 05-26-2012 , 16:59   Punteros en c++
#1

Esque no los entiendoooooooooooooooo

Alguien podría explicarmelos para que Stereo se entere?

He leido hasta ahora: indican no se que en la memoria blablablabla (?

Fail:
Code:
#include <iostream>
#include <cstring>
#include <cstdio>
char *string = "lolxd";
int stringlenght(const char *str)
{
    int len=0;
    for(int i=0;i<=sizeof(str);i++)
    {
        if(str[i]!=NULL)
        {
            printf("%s\n", str[i]);
            len++;
        }
    }
    return len;
}
int main()
{
    printf("Lenght: \n\t%s\n\t<%d>\n\n", string, stringlenght(string));
    getchar();
}

Last edited by Stereo; 06-11-2012 at 08:51. Reason: code fix xd
Stereo is offline
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 05-26-2012 , 17:14   Re: Punteros en c++
#2

Trabajan con la dirección de memoria.

Además, si usas iostream (C++) trabaja con sus funciones, no uses stdio(C).


Disculpa que no pueda decirte más, no tengo tiempo ahora para explayarme.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).


Last edited by gladius; 05-26-2012 at 17:15.
gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
Stereo
Veteran Member
Join Date: Dec 2010
Old 05-26-2012 , 17:30   Re: Punteros en c++
#3

Si pero no acabo de entender la diferencia, cuando se deben usar y cuando no, etc.. :S
Stereo is offline
Javivi
AlliedModders Donor
Join Date: Dec 2008
Old 05-27-2012 , 06:16   Re: Punteros en c++
#4

puto de mierda, para que me dijiste que te los explicara hace meses, si ahora no te acuerdas ¬¬
__________________
Javivi is offline
Stereo
Veteran Member
Join Date: Dec 2010
Old 05-27-2012 , 06:19   Re: Punteros en c++
#5

Quote:
Originally Posted by gladius View Post
Trabajan con la dirección de memoria.
Me dijiste eso pero no me entero xd
Stereo is offline
manux
Member
Join Date: Feb 2011
Location: España
Old 05-27-2012 , 06:30   Re: Punteros en c++
#6

Si no voy mal es una variable estatica cuyo contenido es una direccion de memoria, no me agas mucho caso ya que me manejo muy poco con C++
manux is offline
Stereo
Veteran Member
Join Date: Dec 2010
Old 05-27-2012 , 06:54   Re: Punteros en c++
#7

Pero no entiendo cuál es la diferencia a una variable normal

Code:
char cosa[] = "pepe"
char *cosa = "pepe"

Last edited by Stereo; 05-27-2012 at 07:05.
Stereo is offline
manux
Member
Join Date: Feb 2011
Location: España
Old 05-27-2012 , 07:02   Re: Punteros en c++
#8

Code:
char *pc;   /* pc es un puntero a carácter */
char c;      /* c es una variable de tipo carácter */
manux is offline
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 05-27-2012 , 07:09   Re: Punteros en c++
#9

creo q su principal funcionamiento es almacenar datos temporales

EDIT; algo así como static; no se nada de C++
__________________

www.amxmodx-es.com

Steam: Luchokoldo

Last edited by rak; 05-27-2012 at 07:12.
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 05-27-2012 , 16:39   Re: Punteros en c++
#10

Los punteros apuntan a una dirección de memoria. No es lo mismo que obtenga el valor a que obtenga la dirección de memoria del valor.

Puedes usar dos operadores básicos dentro de los punteros. &(Direccionamiento) y *(Indireccionamiento)

Sintaxis:

int *ptrA, A;
A = 5;
ptrA = &A; // puntero a la variable A

ptrA es un puntero a int, mientras que la variable A es solo una variable del tipo int.
Todo puntero debe ser precedido por un asterisco (*).
Un puntero si es constante NO PUEDE ser modificado. int *const ptrA = 5; Puede alterarse solo si apunta a una variable y esta se modifica.

Si tengo un puntero A que apunta a la posición X y tengo otro puntero B que apunta a X, si yo modifico el puntero A, el puntero B se va a modificar también. Si yo modifico la variable X, ambos punteros se van a modificar.

Te dejo unos ejemplos hechos por mi, ojalá los entiendas y conozcas alguno de sus usos. (Están hechos en un compilador no muy bueno Dev c++)

Code:
// Operadores Simples

#include <iostream>
using namespace std;

main()
{
      int a = 3, *b = &a;
      
      cout << "a: " << a << endl << "b: " << b << " ( " << *b << " )" << endl;
      
      system("pause");
}
Code:
// Operadores Simples con puntero constante

#include <iostream>
using namespace std;

main()
{
      int a = 3;
      const int * const b = &a;
      
      cout << "a: " << a << " - b: " << *b << endl;
      a = 5;
      cout << "a: " << a << " - b: " << *b << endl;      
      
      system("pause");
}
Code:
// Función valor por referencia.

#include <iostream>
using namespace std;

// Esta Función permite que la variable b
void Funcion(int *a)
{
       *a+= (*a * 2);  
}

main()
{
      int b = 5;
      
      cout << "valor: " << b << endl;
      Funcion(&b); // La variable b obtiene su nuevo valor, sin necesidad de hacer que la variable retorne el resultado de la función
      cout << "valor: " << b << endl;
      
      system("pause");
}
Code:
// Retornar un arreglo de Enteros

#include <iostream>
using namespace std;

int *Arreglo(int a)
{
       int i, Arr[10];
       
       for(i = 0; i < 10; i++)
       {
              Arr[i] = a + (i * 2);
       }
       
       return Arr;
}

main()
{      
      int a, *b;
      
      b = Arreglo(5); 
      a = *(b + 2); // b sería el primer elemento del arreglo, entonces b + 2 es el 3er elemento. SE DEBE RESPETAR EL PARENTESIS.
      
      cout << "valor: " << a << endl;
      
      system("pause");
}
Code:
// Recorrer un Arreglo de Enteros

#include <iostream>
using namespace std;
 
main()
{
    int arr[6] = { 1, 3, 5, 7, 9, 20 };
    int *a;
 
    a = arr; // Puntero toma valor del arreglo int
 
    // La x es el valor que se va a mostrar
    cout << *a << endl; //[x][3][5][7][9][20]
    a+= 2;
    cout << *a << endl; //[1][3][x][7][9][20]
    a-= 1;
    cout << *a << endl; //[1][x][5][7][9][20]
    a+= 4;
    cout << *a << endl; //[1][3][5][7][9][x]
    a-= 2;
    cout << *a << endl; //[1][3][5][x][9][20]
    
    system("pause");
}
Code:
// Punteros entre funciones

#include <iostream>
using namespace std;

//Una función es la dirección de memoria de donde comienza el código. Por ende se puede retornar entre funciones.
bool functionA(int param1, bool (*verificar)(int))
{
        if(((*verificar)(param1)))
        {
                return true;
        }
        return false;
}
 
bool functionB(int param)
{
        if(param & 1) // Es una forma de obtener los números impares mediante el uso de operadores Binarios
        {
                return false;
        }
        else
        {
                return true;
        }
}
 
main()
{
    int x = 110;
    bool a = functionA(x, functionB); // El segundo parametro es un puntero a la función B
    
    if(a)
    {
          cout << "Es Par" << endl;
    }
    else
    {
          cout << "Es Impar" << endl;
    }
                
    system("pause");
}
También te voy a agregar uno de una lista enlazada, no es complicado de entender.

Code:
#include <iostream>
using namespace std;

class Nodo {
	private:
	        int value;                  
	
	public:
	        Nodo *next;
	        Nodo(int value) // Constructor
            {
		         this->value = value;
		         next = NULL;
	        }
        	int GetValue() 
            {
        		return value;
        	}
};

main()
{
      int val, i;
      Nodo *head = NULL, *aux2;   
      
      for(i = 0; i < 4; i++)
      {       
              cout << "Ingresa Un valor: ";
              cin >> val;   
              
              if(head == NULL)
	          {
					 head = new Nodo(val);     
                     aux2 = head;                           
			  }
				
			  else
			  {
					 Nodo *body = head;
					
					 while(body->next != NULL)
					 {
						  body = body->next;
				     }
					
					 body->next = new Nodo(val); 	
			  }
      }
     
      cout << endl << "Listando..." << endl;	
			
	  Nodo *aux = aux2;		
      while(aux != NULL)
      {
			 cout << aux->GetValue() << endl;	     
			 aux = aux->next;
      } 
      system("pause");
}
Disculpa pero no sé como redactarlo de una mejor forma más teórica.

Quiero agregar por último que cuando veas Nodos, Lista enlazada, Stacks, Queue, Arbol binario y otros métodos avanzados, vas a utilizar MUCHO los punteros.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).


Last edited by gladius; 05-27-2012 at 16:43.
gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:03.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode