Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: barnix456 en 12 Noviembre 2012, 14:16 pm



Título: Arreglo y puntero en una funcion [No me corre]
Publicado por: barnix456 en 12 Noviembre 2012, 14:16 pm
En la escuela, me han dejado un problema sencillo, pero el maestro quiere que usemos, arreglos, punteros y una función, el problema es: "Contar una cierta cantidad de números (he puesto 10) y almacenarlas en mi arreglo, despues de tenerlas ahi, pasarle la direccion de cada datos, no del arreglo completo, sino de cada datos a mi puntero, de cierta forma tambien trabajara como un arreglo de puntero o algo asi, y despues con los punteros hacer el calculo, que en este caso sera una suma, he estado todo el dia, y no me corre, alguna idea... les dejo mi code:

code:

Código:
#include <stdio.h>
#include <stdlib.h>
#define sise 10
int suma(int arreglo[sise]);
void main ()
{
    int arreglo[sise], i;
    for (i=0;i<=sise-1;i++) //Aqui voy recorriendo el arreglo
    {
        printf("Escriba el numero\n");
        scanf("%d", &arreglo[i]);  // voy guardando un dato en cada posicion del arreglo
    }
    suma(arreglo[sise]);  // mi funcion que trabaja con los datos de mi arreglo
}
int suma(int xarreglo[sise]) //Inicializacion de mi funcion
{
    int sum=0,i,*pnt[sise];
    for(i=0;i<=sise-1;i++)    //Con el segundo for, recorro el arrelo de nuevo
    {
        pnt[i]=&xarreglo[i];  //doy al puntero la direccion de cada numero guardado en el arreglo
        sum+=pnt[i];
    }
    printf("La suma es: %d\n",sum);
}


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: C_1^N en 12 Noviembre 2012, 14:33 pm
Hola barnix456!!
A ver.. vi dos cuestiones.. el main deberia devolver un entero pq de esta manera le devuelve el estado a la consola una vez finalizado el programa, cuando le pasas el arreglo a la funcion hacelo sin el [sise] el nombre del arreglo es un puntero al primer elemento del mismo y poniendole un subindice especifico le estas pasando el elemento de la posicion sise, no el arreglo completo.

Saludos!


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: barnix456 en 12 Noviembre 2012, 14:51 pm
Hola C_1^N

Siempre me marca ese error, de que "El tipo de devolucion de main no es int", pero no se que es lo que deberia cambiar, si el codigo esta bien, y si lo ejecuto lo hace con normalidad, ahora en cuanto al codigo, le he dado vueltas y vueltas ya le hice esa modificacion que me dijiste, pase la funcion

suma(arreglo[]);

y nada


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: satu en 12 Noviembre 2012, 15:04 pm
Buenas!!!

Te he cambiado el código, a ver si es esto lo que necesitas:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define size 10
  5.  
  6. void suma(int *arreglo);
  7.  
  8. int main () {
  9.    int arreglo[size], i;
  10.    for(i = 0; i < size; i++) { //Aqui voy recorriendo el arreglo
  11.        printf("Escriba el numero\n");
  12.        scanf("%d", &arreglo[i]);  // voy guardando un dato en cada posicion del arreglo
  13.    }
  14.    suma(arreglo);  // mi funcion que trabaja con los datos de mi arreglo
  15.    while(getchar() != '\n') ; // Limpia el buffer
  16.    getchar(); // Pausa la ejecucion del programa hasta que pulses una tecla
  17.    return 0;
  18. }
  19.  
  20. void suma(int *xarreglo) { //Inicializacion de mi funcion
  21.    int sum = 0, i, pnt[size];
  22.    for(i = 0; i < size; i++) {
  23.        pnt[i] = xarreglo[i];
  24.        sum+=pnt[i];
  25.    }
  26.    printf("La suma es: %d\n", sum);
  27. }
  28.  
  29.  

Saludos!!


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: Ferno en 12 Noviembre 2012, 15:10 pm
Hola!

Antes que nada, para pasarle a la función el arreglo solo debes hacer:

Código
  1. suma(arreglo);

Le estarías pasando por parámetro la dirección al primer elemento del arreglo. Con eso es suficiente para que tu argumento actual actúe ordenadamente.

Por otro lado, dentro del for de la función suma no estoy muy seguro de lo que quieres hacer. Pero lo que estás haciendo ahí es sumar las direcciones de memoria de todos los int que forman el arreglo.
En realidad no es necesario utilizar ese arreglo de punteros "pnt", pero si tanto lo quieres, fijate que al hacer:

Código
  1. sum += pnt[i];

En realidad lo que haces ahí es sumar los punteros (que es lo que guarda pnt) es decir, sumas las direcciones de memoria de cada uno de los int correspondientes.
Para que esto funcione, lo que debes hacer es desreferenciar dichos punteros:

Código
  1. sum += *pnt[i];

Así estarías sumando los valores correspondientes que apuntan dichos punteros.

Si bien esto funcionaría, la verdad es que el code está un poco desordenado y es feo. Fijate de poder arreglarlo y hacer algo más limpio (por ejemplo, ese arreglo de punteros no es necesario). Además, fijate que la función "suma" debería de devolver un "int" y jamás lo hace (sólo imprime la suma por pantalla).


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: barnix456 en 12 Noviembre 2012, 15:13 pm
Hola satu

Gracias por el codigo, no sabia eso para limpiar el bufer, entonces anlizando tu codigo, mi variable pnt que en este caso queria que fuera mi puntero osea de esta manera *pnt, no va, si no el puntero es el arreglo, y pnt viene siendo un arreglo cualqueira, la magia esta en pasar a la funcion nuestro arreglo sin un subindice, bueno sin nada.. gracias....!!  ;)


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: barnix456 en 12 Noviembre 2012, 15:18 pm
una pregunta mas, si estamos trabajando con punteros, puedo imprimir en pantalla la diraccion de ese dato, como lo hago????


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: Ferno en 12 Noviembre 2012, 15:21 pm
Si por ejemplo tenés una variable de tipo "int":

Código
  1. printf("La dirección de la variabe es: %x",&variable);

Lo que hace "%x" es imprimirlo en hexadecimal, y el ampersand (&) te devuelve la dirección de memoria de la variable.

Saludos.


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: C_1^N en 12 Noviembre 2012, 15:22 pm
tamb podes hacerlo con %p

Saludos!


Título: Re: Arreglo y puntero en una funcion [No me corre]
Publicado por: barnix456 en 12 Noviembre 2012, 15:29 pm
gracias muchas gracias...!!