Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pregunta sobre C++

Estas en el tema de Pregunta sobre C++ en el foro de C/C++ en Foros del Web. Podrian, porfavor, explicar el porque del asterisco en la siguiente linea de codigo: Tabla<char *> TablaCad(nElementos); ¿Acaso hace de "TablaCad" un puntero? ¿O hace a ...
  #1 (permalink)  
Antiguo 11/09/2008, 11:54
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Pregunta sobre C++

Podrian, porfavor, explicar el porque del asterisco en la siguiente linea de codigo:

Tabla<char *> TablaCad(nElementos);

¿Acaso hace de "TablaCad" un puntero?

¿O hace a la clase "Tabla" un puntero?

¿O como seria la correcta interpretaciòn?

Gracias.

Ejercicio completo en:
http://www.conclase.net/c/curso/index.php?cap=040b
En el Tema: Posibles Problemas
  #2 (permalink)  
Antiguo 11/09/2008, 13:52
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Pregunta sobre C++

Buenas!, seguramente habras llegado en algun lugar que se suele llamar:

punteros a punteros.

Que significa eso?

Pues muy facil, con un ejemplo lo entenderas:

Código:
int Int = 10;
int* pInt = &Int;
int ** ppInt = &pInt; // Puntero a Puntero
Significa, la direccion de la direccion de un valor

Podriamos decir asi:

ppInt apunta a pInt mientras que pInt apunta a Int

Eso es un poco mas entendible no?

Lo que tienes tu, es el siguiente:

char* TablaCad[nElementos];

Esto significari lo siguiente:

TablaCad[0] = "Espero";
TablaCad[1] = "Que";
TablaCad[2] = "Entiendas";
...

Significa que cada posicion de la matriz, contiene una direccion de char ( que serian los char*, o tambien cadenas de caracteres). Para hacerlo mas claro:

int* TablaCad[nElementos];

Significa lo siguiente ( direcciones almacenadas en un vector ):

TablaCad[0] = 0xFFFF;
TablaCad[1] = "0xA0FF";
TablaCad[2] = "0xBF02";
...



Espero ser el maximo entendible posible...

Saludos!
__________________
Habla tu lenguaje favorito! Habla C++!
  #3 (permalink)  
Antiguo 11/09/2008, 14:35
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Pregunta sobre C++

WaRc3L, gracias por la respuesta.

Sin embargo, continuo con la siguiente duda.

Segùn entiendo de tu respuesta, "TablaCad" es efectivamente un puntero. Y si es un puntero la manera correcta de asignarle la direcciòn de una variable es por medio del simbolo "&", como lo detallas en tu ejemplo:

int* pInt = &Int;

Pero en el caso del ejercicio que planteo no sucede esta asignaciòn, sino que solamente se iguala asi:

for(int i = 0; i < nElementos; i++) {
sprintf(cadena, "Numero: %5d", i);
TablaCad[i] = cadena;


Cuando de ser puntero el objeto "TablaCad" deberia asignarsele direcciones asi:

for(int i = 0; i < nElementos; i++) {
sprintf(cadena, "Numero: %5d", i);
TablaCad[i] = &cadena;


Y al no suceder de esta manera es que tengo gran confuciòn sobre la naturaleza de puntero del objeto "TablaCad" . Naturaleza de puntero que segùn entiendo se le asigna por medio de <char*>.

Agradeceria si resolvieras esta confusiòn.

Gracias y saludos.

El ejercicio se encuentra en la direcciòn: http://www.conclase.net/c/curso/index.php?cap=040b
Bajo el tema:
  #4 (permalink)  
Antiguo 11/09/2008, 15:28
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Pregunta sobre C++

Entiendo...

Bueno, hay un lio entre los signos & y los signos * ( eso es mi opinion ), pero es muy facil quando lo entiendes.

Haver, para conseguir la DIRECCION de una variable NORMAL, haces lo siguiente:

int variable = 10;
int* puntero = &variable;

En el ejemplo de arriba, se crea un puntero, con la direccion de la variable. Supongamos, que quiero ese valor, sin tocar la variable.

Lo que haria seria lo siguiente:

printf("Valor: %d",*puntero);

Para llamar el valor que tiene el puntero, se añade el * delante, asi se consiguen los valores sin tocar la variable.

Bien, eso son punteros ''puros'', veamos las matrizes:

int variable[10];
int* puntero = variable;

Esta vez, puntero, apunta al primer valor de la matriz variable. Si no te gusta el ejemplo de arriba, puede ser asi:

int variable[10];
int* puntero = &variable[0]

Es practicamente lo mismo.

Despues, para los char*, lo que almacena son cadenas, hasta encontrar el famoso '\0'.

Espero que lo hayas entendido!

Saludos!
__________________
Habla tu lenguaje favorito! Habla C++!
  #5 (permalink)  
Antiguo 11/09/2008, 16:58
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Pregunta sobre C++

WaRc3L, saludos, creo haber entendido con esta segunda explicaciòn.

Gracias la ayuda.
  #6 (permalink)  
Antiguo 15/09/2008, 15:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 2
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Pregunta sobre C++

hola amigos,

necesito ayuda de ustedes, mi profesor de programacion me dio un programa y no se como hacerlo, el programa dice asi:

"hacer un programa que almacene y organice vehiculos por edad y peso".

ese es el problema, espero que me ayuden.
es urgente. gracias por su atencion.
  #7 (permalink)  
Antiguo 16/09/2008, 05:31
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Pregunta sobre C++

Buenas elvoid, yo pondria eso en un nuevo tema, asi mas gente tendra posibilidad de ayudarte!

Saludos!
__________________
Habla tu lenguaje favorito! Habla C++!
  #8 (permalink)  
Antiguo 22/09/2008, 14:55
 
Fecha de Ingreso: septiembre-2008
Mensajes: 2
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Pregunta sobre C++

hola amigos.....necesito de sus conocimientos......elcodigo es de listas..y al parecer es muy sencillo.....pero no he podido dar con el chiste....ayudenme...a solucionarlo.......es un parcial--....
gracias de antemano...este es el codigo:::===

# include <iostream.h>
# include <conio.h>
#include <stdio.h>


typedef struct NODO NODO;
struct NODO

{

int info;
NODO *sig;
};

//******************************************

class LISTA
{

NODO*cab;

public:
LISTA()
{
cab=NULL;
}
int ins_lista(int n);
int retira_lista(int n);
void listar_lista();
void insertar(NODO*,NODO*,int);
~LISTA();

}


//******************************************

{
void LISTA::insertar(NODO*p,NODO*q,int n)

NODO*nuevo;
nuevo=new NODO;
nuevo->info=n;
nuevo->sig=q;
if(p!=NULL)
p->sig=nuevo;
else cab=nuevo;
}

//*******************************************
int LISTA::ins_lista(int n)
{
NODO*p,*q;
p=NULL;
q=cab;
int encontro=0;
while(q!=NULL&&! encontro)
if(n>q->info)
{
p=q;
q=q->sig;
}
else encontro=1;
if(encontro)
if(n==q->info)
return(-1);//repetido
else insertar(p,q,n);
return 0;
}

//*******************************************
int LISTA::retira_lista(int n)
{
NODO*p,*q ;
p=NULL;
q=cab;
int encontro=0;
while(q!=NULL&&!encontro)
if(n>q->info)
{
p=q;
q=q->sig;
}

else encontro=1;
if(encontro==1&&n==q->info)
{
if(p==NULL)
cab=q->sig;
else p->sig=q->sig;
delete q;
return 0;
}

return -1;
}
//*******************************************
void LISTA::listar_lista()
{
NODO *p;
while(p!=NULL)
{
cout<<p->info<<endl;
p=p->sig;
}
}
//*******************************************
LISTA::~LISTA()
{
NODO*p;
if(cab==NULL)

else
{
p=cab;
while(cab!=NULL)
{
cab=cab->sig;
delete p;
cout<<"destruido nodo..."<<endl;
p=cab;
}
}
}

//********************************************
main()
{
LISTA lista1;
int i;

lista1.f(int i);

cout<<"de numero(para fin de 999)..."<<endl;
cin>>i;
while(i!=999)
{
if(lista1.ins_lista(i)==-1)
cout<<"repetido..."<<endl;
cout<<"de numero (para fin de 999)...."<<endl;
cin>>i;


}
lista1.listar_lista();
cout<<"de numero a retirar(para fin de 999)..."<<endl;
cin>>i;
while (!=999)
{
if (lista1.retira_lista(i)==-1)
cout<<"No existe"<<endl;
cout<< "de numero a retirar(para fin de 999)..."<<endl;
cin>>i;
}
lista1.listar_lista();
}
  #9 (permalink)  
Antiguo 23/09/2008, 06:35
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Pregunta sobre C++

bueno, te digo lo mismo que elvoid, si haces un nuevo post, te ira mejor, ya que tienes mas posibilidades de que te respondan, y asi el foro esta bien ordenado.

Saludos!
__________________
Habla tu lenguaje favorito! Habla C++!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:51.