Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 18 Mayo 2013, 01:50 am



Título: [AYUDA] Código mal escrito.
Publicado por: Zodiak98 en 18 Mayo 2013, 01:50 am
Necesito ayuda con este código qué para uds seguro es algo sencillo de resolverme.

Este es el código:
Código
  1. # include <iostream>
  2. using namespace std;
  3.  
  4. void muestraD_arreglo(int **pArreglo[])
  5. {
  6.     cout << pArreglo[0] << endl;
  7.     cout << pArreglo[1] << endl;
  8.     cout << pArreglo[2] << endl;
  9.     cout << pArreglo[3] << endl;
  10. }
  11. int main()
  12. {
  13.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  14.  
  15.    int *a[4];
  16.  
  17.    a[0] = &b;
  18.    a[1] = &c;
  19.    a[2] = &d;
  20.    a[3] = &e;
  21.  
  22.    muestraD_arreglo(&a);  
  23.  
  24. system("pause>nul");
  25. return 0;    
  26.  
  27. }
  28.  

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


Título: Re: [AYUDA] Código mal escrito.
Publicado por: 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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void muestraD_arreglo(int* pArreglo[])
  6. {
  7.     cout << (int)pArreglo[0] << endl; // Si quieres los valores seria *pArreglo[0]
  8.     cout << (int)pArreglo[1] << endl;
  9.     cout << (int)pArreglo[2] << endl;
  10.     cout << (int)pArreglo[3] << endl;
  11. }
  12.  
  13. int main()
  14. {
  15.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  16.    int *a[4];
  17.  
  18.    a[0] = &b;
  19.    a[1] = &c;
  20.    a[2] = &d;
  21.    a[3] = &e;
  22.  
  23.    muestraD_arreglo(a);
  24.  
  25.    cin.get();
  26.    return 0;
  27. }
  28.  

Saludos   ;D


Título: Re: [AYUDA] Código mal escrito.
Publicado por: Zodiak98 en 18 Mayo 2013, 15:46 pm
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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void muestraD_arreglo(int* pArreglo[])
  6. {
  7.     cout << (int)pArreglo[0] << endl; // Si quieres los valores seria *pArreglo[0]
  8.     cout << (int)pArreglo[1] << endl;
  9.     cout << (int)pArreglo[2] << endl;
  10.     cout << (int)pArreglo[3] << endl;
  11. }
  12.  
  13. int main()
  14. {
  15.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  16.    int *a[4];
  17.  
  18.    a[0] = &b;
  19.    a[1] = &c;
  20.    a[2] = &d;
  21.    a[3] = &e;
  22.  
  23.    muestraD_arreglo(a);
  24.  
  25.    cin.get();
  26.    return 0;
  27. }
  28.  

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
  1. int main()
  2. {
  3. int a = 20;
  4. int *b = &a;
  5.  
  6. pPuntero(&b);
  7.  
  8. }
  9.  
  10. //Y la función tendria esta forma:
  11. void pPuntero(int **p)
  12. {
  13. cout << p << endl; //Muestra dirección del puntero 'b'.
  14. cout << *p << endl; //Muestra dirección de la variable a la que apunta el primer puntero 'b'.
  15. cout << **p << endl; //Muestra el valor de la variable a la que apunta el primer puntero 'b'.
  16. }
  17.  

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


Título: Re: [AYUDA] Código mal escrito.
Publicado por: amchacon en 18 Mayo 2013, 16:04 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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void muestraD_arreglo(int** pArreglo)
  6. {
  7.     cout << (int)pArreglo[0] << endl;
  8.     cout << (int)pArreglo[1] << endl;
  9.     cout << (int)pArreglo[2] << endl;
  10.     cout << (int)pArreglo[3] << endl;
  11. }
  12.  
  13. int main()
  14. {
  15.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  16.    int *a[4];
  17.  
  18.    a[0] = &b;
  19.    a[1] = &c;
  20.    a[2] = &d;
  21.    a[3] = &e;
  22.  
  23.    muestraD_arreglo(a);
  24.  
  25.    cin.get();
  26.    return 0;
  27. }

O si lo prefieres:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void muestraD_arreglo(int** pArreglo)
  6. {
  7.     cout << (int) *(pArreglo) << endl;
  8.     cout << (int) *(pArreglo+1) << endl;
  9.     cout << (int) *(pArreglo+2) << endl;
  10.     cout << (int) *(pArreglo+3) << endl;
  11. }
  12.  
  13. int main()
  14. {
  15.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  16.    int *a[4];
  17.  
  18.    a[0] = &b;
  19.    a[1] = &c;
  20.    a[2] = &d;
  21.    a[3] = &e;
  22.  
  23.    muestraD_arreglo(a);
  24.  
  25.    cin.get();
  26.    return 0;
  27. }

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.


Título: Re: [AYUDA] Código mal escrito.
Publicado por: Zodiak98 en 18 Mayo 2013, 16:12 pm
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. :)


Título: Re: [AYUDA] Código mal escrito.
Publicado por: amchacon en 18 Mayo 2013, 16:21 pm
Hehe 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 &.


Título: Re: [AYUDA] Código mal escrito.
Publicado por: Zodiak98 en 18 Mayo 2013, 16:35 pm
Hehe perdonen mi ignorancia.  :rolleyes: Pero sigo sin entender una cosa, es decir, que al yo hacer esto:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void muestraD_arreglo(int *pArreglo[])
  6. {
  7.     cout <<  (pArreglo) << endl;
  8.     cout <<  (pArreglo + 1) << endl;
  9.     cout <<  (pArreglo + 2) << endl;
  10.     cout <<  (pArreglo + 3) << endl;
  11. }
  12.  
  13. int main()
  14. {
  15.    int b = 15 , c = 30 , d = 29 , e = 76 ;
  16.    int *a[4];
  17.  
  18.    a[0] = &b;
  19.    a[1] = &c;
  20.    a[2] = &d;
  21.    a[3] = &e;
  22.  
  23.    muestraD_arreglo(a);
  24.  
  25.    cin.get();
  26.    return 0;
  27. }
  28.  

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. >__<


Título: Re: [AYUDA] Código mal escrito.
Publicado por: amchacon en 18 Mayo 2013, 16:56 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 :)