[AYUDA] Código mal escrito.

Iniciado por Zodiak98, 18 Mayo 2013, 01:50 AM

0 Miembros y 1 Visitante están viendo este tema.

Zodiak98

Necesito ayuda con este código qué para uds seguro es algo sencillo de resolverme.

Este es el código:
Código (cpp) [Seleccionar]

# include <iostream>
using namespace std;

void muestraD_arreglo(int **pArreglo[])
{
     cout << pArreglo[0] << endl;
     cout << pArreglo[1] << endl;
     cout << pArreglo[2] << endl;
     cout << pArreglo[3] << endl;
}
int main()
{
    int b = 15 , c = 30 , d = 29 , e = 76 ;
   
    int *a[4];
   
    a[0] = &b;
    a[1] = &c;
    a[2] = &d;
    a[3] = &e;
   
    muestraD_arreglo(&a);   

system("pause>nul");
return 0;     

}


Lo qué intento hacer es pasar la dirección de memoria de un arreglo que a la vez es un puntero.

CCross

#1
Hola prueba de esta forma, te imprimira cada direccion de las variables apuntada
por el vector de punteros creo que es eso lo que buscas.

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void muestraD_arreglo(int* pArreglo[])
{
    cout << (int)pArreglo[0] << endl; // Si quieres los valores seria *pArreglo[0]
    cout << (int)pArreglo[1] << endl;
    cout << (int)pArreglo[2] << endl;
    cout << (int)pArreglo[3] << endl;
}

int main()
{
   int b = 15 , c = 30 , d = 29 , e = 76 ;
   int *a[4];

   a[0] = &b;
   a[1] = &c;
   a[2] = &d;
   a[3] = &e;

   muestraD_arreglo(a);

   cin.get();
   return 0;
}


Saludos   ;D

Zodiak98

#2
Cita de: CCross en 18 Mayo 2013, 03:12 AM
Hola prueba de esta forma, te imprimira cada direccion de las variables apuntada
por el vector de punteros creo que es eso lo que buscas.

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void muestraD_arreglo(int* pArreglo[])
{
    cout << (int)pArreglo[0] << endl; // Si quieres los valores seria *pArreglo[0]
    cout << (int)pArreglo[1] << endl;
    cout << (int)pArreglo[2] << endl;
    cout << (int)pArreglo[3] << endl;
}

int main()
{
   int b = 15 , c = 30 , d = 29 , e = 76 ;
   int *a[4];

   a[0] = &b;
   a[1] = &c;
   a[2] = &d;
   a[3] = &e;

   muestraD_arreglo(a);

   cin.get();
   return 0;
}


Saludos   ;D

Hehe gracias, pero ya había intentado eso. Lo qué intento hacer es, no pasar la direcciones de memoria que almacena el arreglo, si no, la dirección de memoria de cada arreglo como tal. En pocas palabras un doble puntero.

Un doble puntero "simple" se pasaría así:
Código (cpp) [Seleccionar]

int main()
{
int a = 20;
int *b = &a;

pPuntero(&b);

}

//Y la función tendria esta forma:
void pPuntero(int **p)
{
cout << p << endl; //Muestra dirección del puntero 'b'.
cout << *p << endl; //Muestra dirección de la variable a la que apunta el primer puntero 'b'.
cout << **p << endl; //Muestra el valor de la variable a la que apunta el primer puntero 'b'.
}


Ahora estoy tratando de hacer eso mismo pero con un arreglo.

amchacon

#3
Cita de: Zodiak98 en 18 Mayo 2013, 15:46 PM
Ahora estoy tratando de hacer eso mismo pero con un arreglo.
Es igual pero sustituyendo el [] por un asterisco en la definición de la función:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void muestraD_arreglo(int** pArreglo)
{
    cout << (int)pArreglo[0] << endl;
    cout << (int)pArreglo[1] << endl;
    cout << (int)pArreglo[2] << endl;
    cout << (int)pArreglo[3] << endl;
}

int main()
{
   int b = 15 , c = 30 , d = 29 , e = 76 ;
   int *a[4];

   a[0] = &b;
   a[1] = &c;
   a[2] = &d;
   a[3] = &e;

   muestraD_arreglo(a);

   cin.get();
   return 0;
}


O si lo prefieres:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void muestraD_arreglo(int** pArreglo)
{
    cout << (int) *(pArreglo) << endl;
    cout << (int) *(pArreglo+1) << endl;
    cout << (int) *(pArreglo+2) << endl;
    cout << (int) *(pArreglo+3) << endl;
}

int main()
{
   int b = 15 , c = 30 , d = 29 , e = 76 ;
   int *a[4];

   a[0] = &b;
   a[1] = &c;
   a[2] = &d;
   a[3] = &e;

   muestraD_arreglo(a);

   cin.get();
   return 0;
}


Al fin al cabo, el [] no es más que una comodidad sintática. Se puede variar como quieras. El código de CCross era correcto.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Zodiak98

#4
Creo qué no me he explicado bien. Lo qué trato de hacer es pasar la dirección de
a[0], a[1], a[2], a[3]. Ya qué cada uno tiene su dirección de memoria, esas direcciones son las que intento pasar. Qué a la vez son punteros que contienen almacenadas otras direcciones.

Hehe amchacon ya esta listo, no me había fijado en el segundo código que me pasaste. :)

amchacon

Cita de: Zodiak98 en 18 Mayo 2013, 16:12 PMHehe amchacon ya esta listo, no me había fijado en el segundo código que me pasaste. :)
Los tres códigos que se han posteado son equivalentes, es escribir lo mismo de distintas formas.

El operador [] es un operador de puntero al igual que * y &.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Zodiak98

#6
Hehe perdonen mi ignorancia.  :rolleyes: Pero sigo sin entender una cosa, es decir, que al yo hacer esto:
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void muestraD_arreglo(int *pArreglo[])
{
    cout <<  (pArreglo) << endl;
    cout <<  (pArreglo + 1) << endl;
    cout <<  (pArreglo + 2) << endl;
    cout <<  (pArreglo + 3) << endl;
}

int main()
{
   int b = 15 , c = 30 , d = 29 , e = 76 ;
   int *a[4];

   a[0] = &b;
   a[1] = &c;
   a[2] = &d;
   a[3] = &e;

   muestraD_arreglo(a);

   cin.get();
   return 0;
}


Automaticamente me envia las dirreciones de memoria de cada arreglo?, es decir, &a[0], &a[1],&a[2],&a[3].

Hehe me puse a practicar una cosa y ya me di cuenta el porque. Hehe Debo aprender a no preguntar tanto sin si quiera hacer las cosas. >__<

amchacon

Cita de: Zodiak98 en 18 Mayo 2013, 16:35 PM
Automaticamente me envia las dirreciones de memoria de cada arreglo?, es decir, &a[0], &a[1],&a[2],&a[3].
En un arreglo, las variables se guardan consecutivamente en la memoria. De ahí que en el ejemplo haya puesto (+1,+2,+3...).

Pero supongo que ya te has dado cuenta :)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar